web-dev-qa-db-ja.com

Django絶対URLを取得

テンプレートで絶対URLを取得したい。 urlは使用できません。相対URLが表示されます。これを入手する必要があります:

http://domain.tld/article/post

しかしDjangoは私にちょうど与えます

/article/post

私はsettings.pyで遊んでみましたが、うまくいきませんでした。 (debug = false、許可されたホスト対)

テンプレートコード:

{% url 'blog:detail' blog.slug %}
15
neuraminidase7

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',
)
7
neuraminidase7

これはビューで簡単に実行できます。例えば:

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

テンプレートでこれを行う場合は、あまり問題なく独自のテンプレートタグを作成できます。