Phi*_*ord 21 django django-templates django-urls
在我的urls.py中,我有:
(r'^(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/section/(?P<slug>[-\w]+)/$',
'paper.views.issue_section_detail',
{},
'paper_issue_section_detail'
),
Run Code Online (Sandbox Code Playgroud)
而我正在尝试在模板中执行此操作:
{% url paper_issue_section_detail issue.pub_date.year,issue.pub_date.month,issue.pub_date.day,section_li.slug %}
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
TemplateSyntaxError
Caught an exception while rendering: Reverse for 'paper_issue_section_detail' with arguments '(2010, 1, 22, u'business')' and keyword arguments '{}' not found.
Run Code Online (Sandbox Code Playgroud)
但是,如果我将URL模式更改为只需要一个参数,它就可以正常工作.即:
(r'^(?P<year>\d{4})/$',
'paper.views.issue_section_detail',
{},
'paper_issue_section_detail'
),
Run Code Online (Sandbox Code Playgroud)
和:
{% url paper_issue_section_detail issue.pub_date.year %}
Run Code Online (Sandbox Code Playgroud)
所以当我使用'url'模板标签传递多个参数时似乎抱怨 - 我用两个参数得到了相同的错误.是否有不同的方式来传递几个参数?我尝试传入命名关键字参数,并生成类似的错误.
对于它的价值,相关视图如下所示:
def issue_section_detail(request, year, month, day, slug):
Run Code Online (Sandbox Code Playgroud)
如何将多个参数传递给url模板标记?
Vla*_* T. 13
我有同样的问题(我正在使用Django 1.3.1)并尝试了GregorMüllegger的建议,但这有两个原因:
因此,唯一可行的解决方案是:
{% url news_detail slug=object.slug year=object.date|date:"Y" month=object.date|date:"m" day=object.date|date:"d" %}
Run Code Online (Sandbox Code Playgroud)
问题存在于/(?P<month>\d{2})/
您的网址配置中.它只允许两位数(\d{2}
)而issue.pub_date.month
只有一位数.
您可以在URL中同时允许一个数字(但这将违反唯一URL的原则,/2010/1/...
将与之相同/2010/01/...
)或将两位数传递给url templatetag中的month参数.
您可以使用date
过滤器来实现日期对象的一致格式化.像这样使用url标签:
{% url paper_issue_section_detail issue.pub_date|date:"Y",issue.pub_date|date:"m",issue.pub_date|date:"d",section_li.slug %}
Run Code Online (Sandbox Code Playgroud)
查看月和日参数:它将始终显示为两位数(如果需要,前导零).查看now标签的文档,了解date
过滤器可以使用哪些选项.
你的月份表达式是(?P<month>\d{2})
,但你发送的是参数1
.的1
不匹配\d{2}
,所以在URL解析没有发现你的看法.
尝试将月份表达式更改为\d{1,2}
(或类似的效果).