在我的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'
),
我正在尝试在模板中执行此操作:
{% url paper_issue_section_detail issue.pub_date.year,issue.pub_date.month,issue.pub_date.day,section_li.slug %}
但是我收到了这个错误:
TemplateSyntaxError
Caught an exception while rendering: Reverse for 'paper_issue_section_detail' with arguments '(2010, 1, 22, u'business')' and keyword arguments '{}' not found.
但是,如果我将URL模式更改为只需要一个参数,它就可以正常工作。即:
(r'^(?P<year>\d{4})/$',
'paper.views.issue_section_detail',
{},
'paper_issue_section_detail'
),
和
{% url paper_issue_section_detail issue.pub_date.year %}
所以当我使用'url'模板标记传递多个参数时似乎抱怨 - 我得到两个参数的相同错误。是否有不同的方式来传递几个参数?我试过传递命名关键字参数,并产生类似的错误。
对于它的价值,相关视图的开头如下:
def issue_section_detail(request, year, month, day, slug):
如何将多个参数传递给url模板标记?
答案 0 :(得分: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" %}
答案 1 :(得分:8)
问题存在于网址配置的/(?P<month>\d{2})/
部分。它只允许两位数(\d{2}
)而issue.pub_date.month
只有一位数。
您可以在网址中同时允许一位数字(但这会违反唯一网址的原则,/2010/1/...
将与/2010/01/...
相同)或将两位数传递给月份参数你的网址模板标签
您可以使用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 %}
查看月份和日期参数:它将始终显示为两位数(如果需要,前导零)。请查看documentation of the now tag,了解date
过滤器可能的选项。
答案 2 :(得分:5)
您的月份表达式为(?P<month>\d{2})
,但您发送的是1
参数。 1
与\d{2}
不匹配,因此网址解析程序找不到您的视图。
尝试将月份表达式更改为\d{1,2}
(或类似的效果)。