我目前正在学习Python并使用Django创建一个Web应用程序。由于我意识到代码中发生了什么,我遇到了障碍。我正在使用以下代码创建链接列表:
{% for topic in topics %}
<li>
<a href="{% url 'learning_logs:topic' topic.id %}">
{{ topic }}
</a>
</li>
我不确定.id属性是否是Django中内置的东西,以便了解要返回主题的id。这将传递给以下url模式:
url(r'^topics/(?P<topic_id>\d+)/$', views.topic, name='topic'),
.id某种函数可以查找每个主题的“id”或“key”,然后将其传递给url函数内的正则表达式吗?如果代替
,代码是否会停止正常工作<topic_id>
在正则表达式中,我会有像
这样的东西<topic_key>
感谢您的指导。我已经阅读了文档,我觉得这是一个被识别为obj_id的参数,我认为.id是一种引用它的方法和一些与之相关的函数,但我不完全确定 - 只是一个投机性扣除。
谢谢你,社区:)
答案 0 :(得分:0)
首先,是的。保存到数据库时,每个模型都会自动获得id
(或pk
)属性。它在模型表中保存对象的id(或主键..)。
现在让我们关注代码的重要部分:
url(r'^topics/(?P<topic_id>\d+)/$', views.topic, name='topic'),
大致相当于:
def get_topic(topic_id):
# magic
return topic_with_that_id
和
{% for topic in topics %}
<a href="{% url 'learning_logs:topic' topic.id %}">
</a>
{% endfor %}
大致相当于:
for topic in topics:
get_topic(topic.id)
正如您所看到的,实际上论证的名称是什么并不重要
只要您传递正确数量和类型的参数,r'^topics/(?P<topic_id>\d+)/$'
中的{% url 'learning_logs:topic' topic.id %}
也不重要。
重要说明:中的参数名称
url(r'^topics/(?P<topic_id>\d+)/$', views.topic, name='topic'),
仅在视图代码中有用,而不在模板中。您在模板中使用的名称必须与您的模型一致。