为什么get_absolute_url()不起作用

时间:2012-02-09 15:31:29

标签: django django-models

我是django的新手,我遇到了get_absolute_url()的问题: 我的模特:

class Band(models.Model):
B_Name = models.CharField(max_length=30, primary_key=True)
Country = models.CharField(max_length=30)
genre = models.ForeignKey(Genre)
imageband = models.ImageField(upload_to='images/band')

def __unicode__(self):
    return self.B_Name

@models.permalink
def get_absolute_url(self):
    return '/genre/%s/%s/' % (self.B_Name, self.genre)

我的网址:

url(r'^genre/(\d+)/$', 'genre', name="genre"),  
url(r'^genre/(?P<B_Name>)/(?P<genre>\[-\w]+)/$', 'thu'),    

我的观点:

def genre(request, url):
template = 'genre/genre.html'
if url=='1':
    tmp = Band.objects.raw('SELECT B_Name, Country FROM data_band WHERE genre_id=%s', ...)
if ....
......
return render_to_response(template,{'tmp':tmp})


def thu(request):
template = 'genre/thu.html'
tmp = Band.objects.raw('SELECT B_Name, genre FROM data_band')
return render_to_response(template,{'tmp':tmp})

我的模板genre.html:

{% for x in tmp %}
<tr>
<th><a href="{{x.get_absolute_url}}">{{x.B_Name}}</a></th>
<th>{{x.Country}}</th>
</tr>       
{% endfor %}

我不知道为什么它不起作用。

2 个答案:

答案 0 :(得分:5)

如果您正在使用the Permalink decorator,则get_absolute_url方法应返回包含视图名称,args和关键字args的元组:

@models.permalink
def get_absolute_url(self):
    return ('genre', (), {       # 'genre' here is name of the url: name="genre"
        'B_Name': self.B_Name,   # substitute: (?P<B_Name>)
        'genre': self.genre.     # substitute:  (?P<genre>\[-\w]+)
    })

答案 1 :(得分:0)

永久链接采用视图名称或网址模式名称。在您的情况下,您有一个名为'genre'的视图和一个名为'genre'的网址模式名称。你想用哪个?

它可能会尝试匹配第一个命名的url模式并失败。至少要检查一下。