SOと同じように、djangoアプリのURLにナメクジを追加しようとしています。
現在、次のようなURLで問題なく機能するページがあります。
http://example.com/foo/123/
次のような「slugified」URLを追加したいと思います。
http://example.com/foo/123/foo-name-here
urlconfを変更し、ビュー関数に使い捨ての値を追加するだけで、問題なく動作させることができます。
#urls.py
ulpatterns = patterns('project.app.views',
url(r'^foo/(?P<foo_id>\d+)/(?P<name_slug>\w+)/$', 'foo_detail', name='foo_detail'),
)
#views.py:
def foo_detail(request, foo_id, name_slug):
# stuff here, name slug is just discarded
スラッグでURLを確認することは問題なく機能します。
ただし、私の問題は、を使用しているときです@models.permalink
。
私のFoo
モデルでは、以前は次のものがありましたが、これは問題なく機能しました。
@models.permalink
def get_absolute_url(self):
return ('foo_detail', [str(self.id),])
ただし、変更後、{{ foo.get_absolute_url }}
テンプレートを呼び出すと、結果は常に空の文字列になります。
の次の2つの置換を試しましたがget_absolute_url
、どちらも機能していません。
from django.template.defaultfilters import slugify
# attempt 1
@models.permalink
def get_absolute_url(self):
return ('foo_detail', [str(self.id), slugify(self.name)])
# attempt 2
@models.permalink
def get_absolute_url(self):
return ('foo_detail', (), {
'foo_id': str(self.id),
'name_slug': slugify(self.name),
})
戻る前にaを追加するprint slugify(self.name)
と、slugifiedの名前がコンソールに正常に表示されることに注意してください。
テンプレートを呼び出す{{ foo.get_absolute_url }}
と、結果は常に空の文字列になり、エラーは発生しません。
メソッドをに置き換えることができることはわかってreturn '/foo/%s/%s' % (str(self.id), slugify(self.name))
いますが、パーマリンクを機能させて、URLが1か所でのみ定義されるようにしようとしています。私は何が間違っているのですか?