模型:
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 ('thu', (), {
'B_Name': self.B_Name})
网址:
url(r'^genre/(\d+)/$', 'genre', name="genre"),
url(r'^thu/(?P<B_Name>[-\w]+)/$', 'thu', name='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})
如果我使用B_Name =“AB”,它正在工作,但我使用B_Name =“A B”,这是错误的:
NoReverseMatch:反向'thu',参数'()'和关键字参数'{'B_Name':u'A B'}'找不到。
答案 0 :(得分:2)
当然。你的网址是:
url(r'^thu/(?P<B_Name>[-\w]+)/$', 'thu', name='thu'),
[-\w]+
表示“任何非空格字符或' - '一次或多次”。你已明确告诉它不接受空格,所以它没有。
只需用[-\w ]+
替换正则表达式(注意结束括号前的空格),它就可以了。但是,在URL中包含空格确实不是一个好主意。
答案 1 :(得分:1)
您的名为thu
的网址不允许B_Name
参数中的空格。它应该是
url(r'^thu/(?P<B_Name>[-\w ]+)/$', 'thu', name='thu'),
请注意[-\w ]
中的空格。
通常为您的模型创建一个不包含任何空格的slug field,并在您的网址中使用它。