2016-05-15 33 views
0

我目前有一些有趣的學習Python並使用Django來創建一個web應用程序。由於我願意瞭解代碼中發生了什麼,我遇到了障礙。我創建的使用下面的代碼鏈接的列表:Django .id在url函數中的使用

{% 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」或每個主題的「鑰匙」,然後把它傳遞給URL函數內部的正則表達式?將代碼停在正則表達式身體正常工作如果不是

<topic_id> 

我會有一些諸如

<topic_key> 
  • 保持一切一樣嗎?

我感謝您的指導。我已經通過了文檔,我認爲這是一個被標識爲obj_id的參數,我認爲.id是引用它的一種方式,並且與它相關的一些函數,但我不完全確定 - 只是一個推測性扣除。

謝謝,社區:)

+0

沒有[文檔在這](https://docs.djangoproject.com/en/1.9/topics/db/models/#quick-example)不會回答。 – schwobaseggl

+0

爲什麼不嘗試將它改爲鍵並查看它的作用? – Sayse

回答

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'),只在view`s代碼問題,而不是在模板中的名稱。您在模板中使用的名稱必須符合您的模型。

+1

請注意,您可以在url標記中使用關鍵字參數,例如'{%url'learning_logs:topic'topic_id = topic.id%}'。如果你這樣做,那麼變量'topic_id'必須匹配url模式和視圖中的變量名稱。 – Alasdair

+0

@Alasdair,謝謝,我不知道這個選項。 – DeepSpace

+0

太棒了!感謝解釋!它現在明確:) – decahub