1

私は上司と彼の上司がテンプレートを見て、偽のデータを詰め込み、実際には何もしないアプリからそれらにコメントできるようにしたいので、 django名前空間のURL解決を機能させようとしています。別のアプリでライブ コードを開発する際に同じテンプレートを使用します。したがって、にhttp://localhost:8000/template_test/baseアクセスすると、偽のデータを含む base.html テンプレートがhttp://localhost:8000/uar/base表示され、(できれば) 本物のデータを含む base.html が表示されます。さらに複雑なことに、/template_test/base url または /uar/base url に移動したかどうかに応じて、偽のデータまたは実際のデータのいずれかを含む uar.html に移動するリンクがページにあります。

したがって、テンプレートの適切な部分は次のとおりです。

<li>
  <a href="{% url 'uar:uar' %}">User Access Review</a>
</li>

そして、これが私の project/urls.py の適切な部分です

url(r'^template_test/', include(template_test.urls,
    namespace="uar", app_name="template_test")),

url(r'^uar/', include(uar.urls, namespace="uar", app_name="uar")),

そして template_test/urls.py で

urlpatterns = patterns('',
  url(r'^base$', template_test.views.base, name="base"),
  url(r'^uar$', template_test.views.uar_missing, name="uar"),

そして uar/urls.py で

urlpatterns = patterns('',
  url(r'^base$', uar.views.base, name="base"),
  url(r'^uar$', uar.views.uar_missing, name="uar"),

template_test/views.py

def base(request):
    return render(request, "base.html", {"full_name": "Fake User"},
            current_app="template_test")

および uar/views.py

def base(request):
    return render(request, "base.html", {"full_name": "Paul Tomblin"},
            current_app="uar")

def uar_missing(request):
    return render(request, "uar.html", {}, current_app="uar")

しかし、テンプレートにアプリ コンテキストを提供しているにもかかわらず、base.html がいずれかのコンテキストでレンダリングされると{% url 'uar:uar' %}、テンプレートの/template_test/uar/は両方のコンテキストになります ({{full_name}} には適切な値があり、それぞれ「偽のユーザー」または「ポール・トンブリン」のいずれか)。そのリンクが現在のアプリ コンテキストを使用するようにするには、何を変更する必要がありますか?

追加情報 アプリケーション コンテキストがリバースで機能していません:

python manage.py shell
Python 2.7.4 (default, Apr 19 2013, 18:28:01) 
[GCC 4.7.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from django.core.urlresolvers import reverse
>>> reverse('uar:uar')
'/template_test/uar'
>>> reverse('uar:uar', current_app='uar')
'/template_test/uar'
>>> reverse('uar:uar', current_app='template_test')
'/template_test/uar'
>>> reverse('uar:uar', current_app='txx')
'/template_test/uar'
4

1 に答える 1

0

明らかに、「namespace」と「app_name」を混同していました。私の project/urls.py は次のようになります。

   url(r'^template_test/',
        include(build_urls(template_test.views, 'template_test'),
        namespace="template_test", app_name="uar")),

    url(r'^uar/',
        include(build_urls(uar.views, 'uar'),
        namespace="uar", app_name="uar")),

注: 名前空間と app_name を切り替えました。

template_test/views.py には

def base(request):
    return render(request, "base.html", {"full_name": "Fake User"},
            current_app="template_test")

そして uar/views.py は

def base(request):
    return render(request, "base.html", {"full_name": "Paul Tomblin"})

注: uar/views.py で current_app を渡すことはもうありません。

追加のボーナスとして、リダイレクトを使用しているときに、正しい current_app で「逆」を行う必要があることも発見しました。

于 2013-06-12T20:03:43.320 に答える