2011-04-19 18 views
3

請告訴我正確的方式來使用,並且是指一個slugfield在Django 1.3請告訴我正確的方式來使用,並且是指一個slugfield在Django 1.3

例如下面的代碼應通過蛞蝓鏈接到一個通用視圖但是會收到NoReverseMatch錯誤。

Caught NoReverseMatch while rendering: Reverse for 'single_post' with arguments '('', u'post-2')' and keyword arguments '{}' not found. 

從我的理解這句話的錯誤在於然而模板是一個新手,並嘗試過在{%URL single_post金屬塊= post.slug%}許多不同的變化,這可能並非如此。

有人可以請解釋爲什麼會發生這種情況,以便我可以瞭解問題所在以及如何解決。

伊夫試圖{%URL single_post蛞蝓= post.slug%},{%URL single_post蛞蝓%} {%URL single_post蛞蝓= post.slug%}和許多其他變化

所有幫助感激

模型

slug = models.SlugField(max_length=120, unique=True) 

網址

url(r'^post/(?P<slug>[a-z-]+)/$', list_detail.object_detail, 
     {'queryset': Post.objects.all(), 'template_object_name': 'post', 'slug_field': 'slug'}, name="single_post"), 

模板

{% url single_post slug post.slug %} 

回答

7

您的正則表達式不允許使用數字值。嘗試:

(?P<slug>[\w-]+) 
+0

我試過你的建議,但是沒有運氣。正則表達式絕對是問題,還是可能來自另一個領域。依你的意見?謝謝 – Stu 2011-04-19 14:43:18

+0

嗯。正則表達式似乎是這裏的罪魁禍首。 [a-z - ] +不匹配:post-2。 [ - \ w] +在我的Django應用程序中執行。 \ w根據Python正則表達式語法參考匹配[a-zA-Z0-9_]:http://docs.python.org/library/re.html#re-syntax – Brandon 2011-04-19 14:55:10

+0

非常感謝您的幫助。你是對的。 – Stu 2011-04-19 21:35:50

2

在模板中,假設post是你的模型的實例:

{% url single_post post.slug %} 

您的網址的正則表達式應該如下所示:

url(r'^post/(?P<slug>[\w-]+)/$', ... 

爲了檢驗上述正則表達式,嘗試直接在瀏覽器中使用各種有效的slu access訪問一些帖子,看看它們是否有效。一旦完成,開始測試url名稱。

2

甲蛞蝓值可以包含任何a-zA-Z0-9_-。前3個由特殊字符w表示,由於-本身是一個特殊字符,因此我們需要使用反斜槓\來表示它們。所以正確的表達式變成

url(r'^post/(?P<slug>[\w\-]+)/$', ... 

至少這就是我的情況。

相關問題