为什么get_absolute_url()不起作用

roc*_*cky -1 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)
Run Code Online (Sandbox Code Playgroud)

我的网址:

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

我的观点:

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})
Run Code Online (Sandbox Code Playgroud)

我的模板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 %}
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*mro 5

如果你正在使用Permalink装饰器,你的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]+)
    })
Run Code Online (Sandbox Code Playgroud)