Dea*_*dly 1 django django-templates django-views
我有以下路线:
url(r'^future/programs/$', main.programs, {'period': 'future'}),
url(r'^past/programs/$', main.programs, {'period': 'past'}),
Run Code Online (Sandbox Code Playgroud)
当我尝试显示模板链接,使用模板标记url这样
{% url main.views.main.programs %}
Run Code Online (Sandbox Code Playgroud)
我总是得到链接/past/programs/.当我尝试这样的时候
{% url main.views.main.programs period="future" %}
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
渲染时捕获NoReverseMatch:反向'main.views.main.programs',参数'()'和关键字参数'{'period':u'future'}'未找到.
我如何显示链接/future/programs/?
我想你可能想用一个单独的url模式来处理它:
url(r'^(?P(<period>[\w]+)/programs/$', main.views.programs),
Run Code Online (Sandbox Code Playgroud)
在你看来:
def programs(request, period):
if period == 'future':
...
elif period == 'past':
...
Run Code Online (Sandbox Code Playgroud)
并在模板中:
{% url main.views.main.programs period="future" %}
Run Code Online (Sandbox Code Playgroud)
在您的方法中,您错误地使用反向流向前流,即url conf 的额外关键字参数与传递给匹配模式的关键字参数.
前者是允许在匹配时传递给视图的额外数据(即,当用户转到/ future/programs /时,模式匹配并period=future传递给视图),后者是用于实际数据的实际数据匹配url(即period=future传递给reverse()试图匹配除了那些关键字参数的模式的函数 - 你没有概述)
编辑:
在您的网址中使用更合适的模式将是这样的:
url(r'^(?P(<period>past|future)/programs/$', main.views.programs),
Run Code Online (Sandbox Code Playgroud)
选择只能是"过去"或"未来".这对于传入的URL很好,但是django的reverse()函数(在url模板标记中使用)无法处理其他选择:
https://docs.djangoproject.com/en/dev/topics/http/urls/#reverse
目前的主要限制是模式不能包含使用竖线("|")字符的替代选择.
| 归档时间: |
|
| 查看次数: |
93 次 |
| 最近记录: |