Django-无法在模板中使用带有变量的网址

时间:2019-09-05 12:40:17

标签: django django-templates django-urls

我想有一个链接到页面 make-appointment

的按钮

template.html

{% for key, value in closest_free_spots.items %}
...
<a href="{% url 'make-appointment' value.pk %}"><button type="button">{{ value.datetime }}</button></a>

urls.py

    url(r'^umowienie-spotkania/(?P<pk>\d+)/$', TestPy.views.MakingAppointmentView.as_view(),
            name='make-appointment'),

但是,当我尝试启动它时,出现错误:

Reverse for 'make-appointment' with arguments '('',)' not found. 1 pattern(s) tried: ['umowienie-spotkania/(?P<pk>\\d+)/$']

值value.pk似乎不正确,但是当我在上面一行打印时,它给出了正确的值(即4)。

出什么问题了?我想念的是什么?

closest_free_spots定义-值是 CalendarFreeSlot 模型中的对象

    closest_free_spots = {
        lawyer: TestPy.models.CalendarFreeSlot.objects.filter(Q(lawyer_id=lawyer) & Q(is_available=True)).first() for
        lawyer in object_list}

models.py

class CalendarFreeSlot(models.Model):
    lawyer_id = models.ForeignKey('MyUser', on_delete=models.PROTECT) 
    datetime = models.DateTimeField()
    is_available = models.BooleanField(default=True)

1 个答案:

答案 0 :(得分:1)

您的closest_free_spots字典理解使用CalendarFreeSlot.objects.filter(...).first(),它可以返回None。这会导致错误消息的with arguments '('',)'部分。

在模板中检查{{ value.pk }}是个好主意,但是您似乎错过了字典中没有每一项的价值。

您可以通过检查模板中的{% if value %}来解决此问题。

{% for key, value in closest_free_spots.items %}
{% if value %}
<a href="{% url 'make-appointment' value.pk %}"><button type="button">{{ value.datetime }}</button></a>
{% else %}
{{ key }} has not free spots
{% endif %}
{% endfor %}
相关问题