テンプレートで絶対URLを取得したい。 urlは使用できません。相対URLが表示されます。これを入手する必要があります:
http://domain.tld/article/post
しかしDjangoは私にちょうど与えます
/article/post
私はsettings.pyで遊んでみましたが、うまくいきませんでした。 (debug = false、許可されたホスト対)
テンプレートコード:
{% url 'blog:detail' blog.slug %}
Djangoと長い間会った後、私は多くのことを学びました。今回は絶対URLテンプレートタグを作成しました。
これをテンプレートタグに追加し、デフォルトのURLタグのように使用します。
{% absurl 'some-view' with, arguments %}
これは絶対URLテンプレートタグの要点です 、リクエストオブジェクトをtemplate_context_processorsに追加する必要があります。追加しないと機能しません。これを実現するには、settings.pyを開き、次の行を追加します。
from Django.conf import global_settings
TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + (
'Django.core.context_processors.request',
)
これはビューで簡単に実行できます。例えば:
from Django.core.urlresolvers import reverse
def Home(request):
posts = Article.objects.filter(published=True).order_by('-publish')
site = Site.objects.get_current()
c = RequestContext(request, {
'posts': [{'post': post,
'url': request.build_absolute_uri(reverse('blog:detail', args=[post.slug]))}
for post in posts]
'site': site,
})
return render_to_response('templates/index.html', c)
次に、テンプレートで、{% for postobj in posts %}
アクセスできますpostobj.post
およびpostobj.url
。
テンプレートでこれを行う場合は、あまり問題なく独自のテンプレートタグを作成できます。