2013-12-14 74 views
0

我遇到了我的urlconf問題。我試圖訪問一個頁面時出現以下錯誤: NoReverseMatch at/admin/r/17/1/Django網址未找到模型

反向爲'獎勵'與參數'()'和關鍵字參數'{'slug':u'美味蛋糕'}'沒有找到。 1個模式嘗試:['獎品/(?P)/ $']

如果我手動輸入的網址,我找不到網頁。

我的URL配置:

.... 
url(r'^prizes/$', PrizeList.as_view(), name="prize_list"), 
url(r'^prizes/(?P<slug>\w+)/$', GetPrize.as_view(), name="prize"), 
.... 

我的模型:

class Prize(models.Model): 
    prize_name = models.CharField(max_length=30, blank=False, null=False, verbose_name="the prize's name") 
    prize_slug = models.SlugField(max_length=30, blank=False, null=False, verbose_name="the prize slug") 
    prize_excerpt = models.CharField(max_length=100, blank=False, null=False, verbose_name="prize excerpt") 
    company = models.ForeignKey('Company') 
    prize_type = models.ManyToManyField('Prize_Type') 
    def get_absolute_url(self): 
     return reverse('omni:reward', kwargs={'slug':self.prize_slug}) 
    def __str__(self): 
     return self.prize_name 

最後,模板的一些相關部分:

class GetPrize(SingleObjectMixin, FormView): 
    template_name = 'omninectar/prize.html' 
    slug_field = 'prize_slug' 
    form_class = Redeem_Form 
    model = Prize 

任何想法?

回答

1

兩件事情:

  1. Reverse for 'reward' with arguments '()' and keyword arguments '{'slug': u'yummy-cake'}' not found→在get_absolute_url方法,你告訴Django尋找名爲reward一個URL模式這是不是在你的URLconf。將其更改爲prize,它應該可以工作。

  2. 「如果我手動輸入網址,我得到找不到網頁」→你的模式是\w+,這是在documentation作爲

如果未指定區域設置和UNICODE標誌描述,匹配任何 字母數字字符和下劃線;這相當於 集合[a-zA-Z0-9_]。對於LOCALE,它將匹配[0-9_]加上 ,無論字符在當前的 語言環境中定義爲字母數字。如果設置了UNICODE,則會匹配字符[0-9_]加上 ,任何在Unicode字符 屬性數據庫中都被分類爲字母數字。

所以它只匹配字母,數字和下劃線。它與「美味蛋糕」中的' - '不匹配。你可以在python shell中試試這個:

import re 
    pat = re.compile(r'^prizes/(?P<slug>\w+)/$') 
    pat.match("prizes/yummy-cake/") # no match returned 
    pat.match("prizes/yummycake/") # → <_sre.SRE_Match object at 0x7f852c3244e0> 
    pat = re.compile(r'^prizes/(?P<slug>[-\w]+)/$') # lets fix the pattern 
    pat.match("prizes/yummy-cake/") # now it works → <_sre.SRE_Match object at 0x7f852c3244e0>