1

プロジェクトで django 1.4 を使用しています。多くのアプリのビューでテンプレートを使用したいと考えています。私のurls.pyは次のようになります

urlpatterns = patterns('',
    url(r'^canvas/', include('canvas.urls', namespace="canvas")),
    url(r'^checkin/', include('checkin.urls', namespace="checkin")),
    url(r'^show/', include('facebook_tab.urls', namespace="show")),

私のキャンバス/urls.py

from django.conf.urls import patterns, url
from canvas.views import AllShowsView

urlpatterns = patterns('',
    url(r'^shows/$', AllShowsView.as_view(), name='shows'),
)

私のfacebook_tab/urls.py

from django.conf.urls import patterns, url
from facebook_tab.views import AllShowsView
urlpatterns = patterns('',
    url(r'^shows/$', AllShowsView.as_view(), name='shows'),    
)

を使用するときに現在の名前空間を参照する必要がないように、テンプレートを使用したいと思います{% url shows %}

current_app を Context 辞書に渡そうとしましたが、成功しませんでした。また、のようなことをしようとしてもうまくいきませんreverse("shows", current_app="canvas")。公式ドキュメントはそれについて明確ではありません。

4

2 に答える 2

0

私が最終的に行ったことはurl from future、@lalo が提案したように使用し、アプリとインスタンスの両方の名前空間を urls.py に追加することでした

urlpatterns = patterns('',
url(r'^canvas/', include('canvas.urls', app_name="myapp", namespace="canvas")),
url(r'^checkin/', include('checkin.urls', app_name="myapp", namespace="checkin")),
url(r'^show/', include('facebook_tab.urls', app_name="myapp", namespace="facebook_tab")),

次に、ビューから current_app を次のように設定します。

return render(request, self.template_name, context, current_app="canvas")

そして私の一般的なテンプレートから:

{% load url from future %}
{% url 'myapp:shows'%}

その最後の URL は、に設定された名前空間に解決される'canvas:shows'か、それに応じて解決されます。'facebook_tab:shows'current_app

公式ドキュメントを読みましたが、アプリケーションの名前空間とインスタンスの名前空間の違いをまだ明確に理解していませんが、なんとか機能させることができました。

于 2013-05-07T17:08:50.017 に答える