如果它们存在为链接我想要一些价值。 在某些情况下,值将为None,在某些情况下,它将具有用户应该能够单击的记录。
所以在我的模板中,我把它放在if语句
中{% if expense_row.noteextra.extra.id %} <a href="{% url
'extra_notes_details' pk=expense_row.noteextra.extra.id %}" class="btn
btn-info">{{ expense_row.noteextra}}</a>
{% else %}
{{ expense_row.noteextra}}
{% endif %}
但是尽管if语句我仍然会收到错误
NoReverseMatch at / expense / list / range /
Reverse for 'extra_notes_details' with arguments '()' and keyword arguments '{u'pk': ''}' not found. 1 pattern(s) tried: ['unit/extra_notes_details/(?P<pk>\\d+)$']
这意味着Django模板正在为早期阶段的URL进行解析 并不关心那些非操作的url是否在if语句中,甚至是注释掉的-it只会转储错误。
如何在不收到错误的情况下构建偶尔的链接?
答案 0 :(得分:1)
尝试将方法添加到模型中:
def unit_url(self):
unit_id = getattr(self.noteunit.unit, 'id', None)
if unit_id:
return reverse('extra_notes_details', kwargs={'pk': unit_id})
并在模板中使用它:
{% if expense_row.unit_url %}
{{ expense_row.unit_url }}
{% else %}
{{ expense_row.noteunit}}
{% endif %}
答案 1 :(得分:1)
{% url %}
标记可让您将结果分配给变量。如果无法撤消URL,将不会引发错误。
{% url 'extra_notes_details' pk=expense_row.noteextra.extra.id as the_url %}"
{% if the_url %}
<a href="{{ the_url }}" class="btn btn-info">{{ expense_row.noteextra}}</a>
{% else %}
{{ expense_row.noteextra}}
{% endif %}