Django - 无法在模板中使用变量创建 url

Django - cannot make url with variable in the template

我想要一个链接到页面的按钮 预约

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)

你的 closest_free_spots 字典理解使用 CalendarFreeSlot.objects.filter(...).first(),它可以 return 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 %}