モデル: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:
url(r'^genre/(\d+)/$', 'genre', name="genre"),
url(r'^thu/(?P<B_Name>[-\w]+)/$', 'thu', name='thu'),
ビュー:私はB_Name = "AB" を使用している場合
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"を使用するとエラーです:
NoReverseMatch:Reverse for 'thu'引数 '()'およびキーワード引数 '{' B_Name ':u'A B'} 'が見つかりません。
なぜ標準の 'filter'呼び出しではなく' raw'クエリを使用していますか? –
それは私の習慣ですが、フィルターと生の違いは何ですか? – rocky
@skidrow: 'filter'はデータベースに依存しないDjango DBAPIを利用しますが、' raw'はデータベースに直接問い合わせを行い、この時点であなたのアプリが使用している特定のデータベースに本質的に依存します。別のDBプラットフォームに切り替える必要がある場合は、 'raw'クエリの一部またはすべてが破損する可能性があります。さらに、 'filter'(およびDBAPIの残りの部分)を使用すると、コードをより読みやすく保守しやすくなります。原則として、「生」は「何もしない」シナリオのためのものです。 –