循环时相关对象的django NoReverseMatch错误

时间:2013-06-16 16:59:04

标签: django django-urls

我的模型:“工作室”有一个相关项目,用于在“会话”对象中存储时间和地点:

item=models.OneToOneField(Session)

会话将该位置存储为位置的外键:

location = models.ForeignKey(conference_models.Location,
        verbose_name=_("location"), blank=True, null=True)

我在模板中展示了一个研讨会,我想链接到它的位置。如果模板是一个Workshop视图,这一切都有效,但是如果我传递一个研讨会列表并将其全部包含在内:

{% for w in workshops %}
然后发生了不好的事情......

我在urls.py中有这个来定义位置视图的URL:

url(r'^locations/(?P<location_pk>\d+)/$',
  views.view_location, name='view-location'),

在研讨会模板中我有:

<a href="{% url 'view-location' location_pk=w.item.location.pk %}">
{{w.item.location.pk}} {{w.item.location}}</a> 
- {{w.item.start}} to {{w.item.end}}

我得到Reverse for 'view-location' with arguments '()' and keyword arguments '{'location_pk': ''}' not found.

其中location_pk是我的位置视图的参数。一切似乎都是正确的。例如,如果我这样做:

   <a href="{% url 'view-location' location_pk=123546 %}">
    {{w.item.location.pk}} {{w.item.location}}</a> 
    - {{w.item.start}} to {{w.item.end}}

我在其中获得了123546的预期网址。如果我这样做:

   <a href="{% url 'view-location' location_pk=w.item.pk %}">
    {{w.item.location.pk}} {{w.item.location}}</a> 
    - {{w.item.start}} to {{w.item.end}}

然后我得到了URL中的项主键(这不是我想要的,但证明了我不会生气,希望这可以工作......)。

在所有情况下,{{w.item.location.pk}}标记都会扩展为正确的值。

我已经尝试将其包装在{% with %}标签中,因此没有打点。没有快乐。

这是Django 1.4.5,是一个复杂项目的一部分,可能无法处理1.5的更新。如果这对于一个bigfix需要1.5,我将不得不重新考虑......

请注意,这似乎只发生在{% for %}循环中......

1 个答案:

答案 0 :(得分:0)

由于location字段有null=True, blank=True,因此可能有一些条目为空,因此w.item.location.pk正在评估''

您可以检查{% if w.item.location %},然后加载位置网址。