2017-02-23 79 views
0

我正在開發一個類似應用程序的博客,其中有相似或有時標題相同的帖子。用戶也可以隨時編輯帖子的標題。 目前我的url看起來像這樣。我應該在django網址中使用slug字段嗎?

<a href="{% url 'myapp:read' post.id %}">{{post.title}} </a> 

現在我讀過幾個答案,其中有id沿着他們通過slug太喜歡這個問題的url。 即使idurl將是唯一的,對吧?那爲什麼slug?如果是用於人性化url那麼應該存儲它呢? 所以總結:

  1. 如果id是獨一無二的,那麼爲什麼slug
  2. 如果它的重要那麼我們應該存儲它嗎?
  3. 如果和有什麼關係請詳細說明canonical links &的工作方式slug怎麼可以幫到它?或者至少指引我來源。

參考: when to store slugfield in database in django?answer

+1

Slug只是讓你快速瞭解這個URL的含義。因爲這個問題的網址可能是http://stackoverflow.com/questions/42407755/does-it-work,它仍然重定向到相同的職位。但說了這也取決於實施。在這種情況下,Stack Overflow可能會檢查與帖子ID對應的有效slu and,如果未找到,則重定向到原始slu塊。 – AKS

+0

@AKS,您的評論應該成爲這個問題的答案 – Marat

回答

0
  1. 如果ID是唯一的,那麼爲什麼塞?

彈頭只是一個讓你迅速得到什麼這個URL是大約感的方式 - 這不僅是通過使用id保證它的可讀性。

  1. 如果它的重要那麼我們應該存儲它嗎?

URL這個問題可能是Should I use slug field too in django URLs?仍然重定向到同一個崗位。但說了這也取決於實施。在這種情況下,Stack Overflow可能會檢查與帖子ID對應的有效slu and,如果未找到,則重定向到原始slu塊。

我只是改變了問題的標題和結果的URL也改變了:

old => http://stackoverflow.com/questions/42407755/should-i-use-slug-field-too-in-django 
new => http://stackoverflow.com/questions/42407755/should-i-use-slug-field-too-in-django-urls 

所以,如果你存儲蛞蝓,你需要確保它是更新每次標題被改變。

  • 如果它有什麼用做請詳細規範鏈接&的工作蛞蝓如何幫助呢?
  • Canonical鏈接被搜索引擎用來標識導致相同內容的重複URL。您可以查看到這個職位的源代碼,你可以找到以下的HEAD規範鏈接:當你搜索一些關鍵字此URL匹配

    <link rel="canonical" href="http://stackoverflow.com/questions/42407755/should-i-use-slug-field-too-in-django-urls"> 
    

    搜索引擎將收集這些網址,並將其返還給您。搜索引擎對網頁進行排名的一個因素是URL中的關鍵字。一個好的slug可以幫助搜索引擎根據URL中匹配的關鍵字返回用戶最好的結果。

    +0

    感謝您的答案..!所以如果我說,我會在網址中使用它們,但不會將它們存儲在任何地方,搜索引擎仍然可以利用它們,這是否正確? – Niraj

    +0

    是的,這是真的! – AKS

    +0

    謝謝先生..!這一直在竊聽我好幾天..! :) – Niraj

    0

    您需要通過一個唯一的標識符來識別帖子。這可以是ID或者slu。。使用兩者都是毫無意義的,並且容易出錯。您可以在標題中包含一個slug和一個id,在這種情況下,您應該忽略完全在URL中傳遞的slug並使用該ID。

    可以忽略蛞蝓,只是用這樣的ID:

    url(r'^(?:[\w-]+)/(?<id>\d+)/$', BlogView.as_view(), name='blog-view') 
    

    如果你這樣做,你並不需要保存塞所有,只是從標題每次使用它生成它。

    就我個人而言,我更喜歡slu because,因爲它們提供了與Django良好集成的更友好的URL。例如使用基於類的視圖,你可以創建一個類似如下的URL:

    url(r'^(?P<slug>[\w-]+)/$', BlogView.as_view(), name='blog-view') 
    

    而且你的類基礎觀點是超級乾淨:

    class BlogView(DetailView): 
        model=BlogEntry 
    

    這就是它! Django自動地知道通過slug來查看模型,並假設你的模板正確命名,你不需要連接其他任何東西(好吧,你可能會這樣做)。 github上有關於此設置的真實helpful gist

    如果您想要使用slug,請在保存記錄時生成它,並在碰撞發生時使用某種自動變形來使其變爲唯一(或讓用戶手動覆蓋它)。在我的一個博客中,我將日期嵌入到slug中以使其更加獨特,然後使用遞歸函數來確保它是唯一的。 (here's an little tutorial someone made on making unique slugs)。包含一些手動替代slu is也是一個好主意。

    在他使用上面的鏈接for循環中,我個人更喜歡一個遞歸函數,如:

    def autoslug(self, slug, attempt=1): 
        if MyModel.objects.filter(slug=slug).exists(): 
         return autoslug(slug[:47]+"%d" % attempt, attempt + 1) 
        else: 
         return slug 
    

    您在模型存儲蛞蝓創建蛞蝓場。例如,基於類的視圖可以傳遞一個slu and,它會神奇地找出你想要的。 Django擁有多種內部工具,通過該名稱引用它,所以簡單起見,並使用django所期望的相同名稱。

    此外,給定資源的URL應該不變,因此鏈接是持久的。當您更改標題時更改slug意味着資源的URL發生更改,IMO對同一資源具有更改的URL總是一個壞主意。這對搜索引擎優化並不好,對任何將外部資源鏈接起來的人都不好。

    +0

    感謝您解釋..!根據你的最後一段,如果我實現'slug'和'id'的方式實現了stackoverflow(即改變'url'中的'slug'不會改變結果資源),它會影響SEO嗎?我的意思是我只考慮'id','slug'只是爲了可讀性。 – Niraj

    +0

    如果slug是URL的一部分,並且它發生了變化,它可能會影響SEO。 –

    +0

    謝謝你幫助我理解丹尼斯的各種事情..! – Niraj

    相關問題