Django .id在url函数中的用法

时间:2016-05-15 20:00:49

标签: python django

我目前正在学习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是一种引用它的方法和一些与之相关的函数,但我不完全确定 - 只是一个投机性扣除。

谢谢你,社区:)

1 个答案:

答案 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'),仅在视图代码中有用,而不在模板中。您在模板中使用的名称必须与您的模型一致。