2013-12-14 45 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>