我是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 %}
我不知道为什么它不起作用。
答案 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模式并失败。至少要检查一下。