型號:NoReverseMatch使用時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 ('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 =「AB」,它的錯誤:
NoReverseMatch:Reverse for 'thu'帶有參數'()'和關鍵字參數'{'B_Name':''B'}'找不到。
爲什麼使用'raw'查詢而不是標準'filter'調用? – 2012-02-21 16:20:29
這是我的習慣,濾波器和原始信號有什麼不同? – rocky 2012-02-21 16:45:18
@skidrow:即'filter'使用了與數據庫無關的Django DBAPI,而'raw'則直接查詢數據庫,因此它本質上依賴於此時應用程序正在使用的特定數據庫。如果您需要切換到不同的數據庫平臺,則任何或所有「原始」查詢都可能中斷。另外,使用'filter'(和其他的DBAPI)可以讓你的代碼更具可讀性,更易於維護。作爲一般規則,「原始」僅適用於「其他方式無法做到」的情況。 – 2012-02-21 17:35:51