3

カスタム ページを表示するのではなく、Django 管理サイトをトリガーするいくつかのカスタム管理ページで問題が発生しています。

私のurls.pyは次のとおりです。

urlpatterns = patterns('',
    # ... trimmed ...

    # Admin pages
    url(r'^admin/doc/', include('django.contrib.admindocs.urls')),                       
    url(r'^admin/', include(admin.site.urls)),

    # Lobby Visitor Log
    url(r'^visitorLog', include('lobbyVisitorLog.urls')),
)

私のlobbyVisitorLogアプリでは、「管理者」ページにつながる次のディレクトリ構造があります

lobbyVisitorLog
  - templates
      - admin

そして、私のlobbyVisitorLog/urls.pyは次のとおりです。

urlpatterns = patterns('visitorLog.views',
    url(r'^/$', views.home, name='homeView'),
    url(r'^/search', views.search, name='searchView'),
    url(r'^/submit', views.submit, name='submitView'),

    url(r'^/admin/$', views.adminView, name='adminView'),
    url(r'^/admin/import/$', views.adminImportView, name='adminImportView'),

    url(r'^/(?P<guest_type>\w+)$', views.logEntry, name='logEntryView'),
)

管理インデックス ページのviews.pyは次のようになります。

def adminView(request):
    return render(request, 'admin/index.html', {}, context_instance=RequestContext(request))

「mysite/visitorLog/admin/」にアクセスすると、Django 管理サイトに次のメッセージが表示されます。「何も編集する権限がありません。」</p>

ただし、「admin」ディレクトリを「utils」(または「admin」以外のもの) に変更し、views.pyそれに応じて更新すると、すべてが期待どおりに表示されます。これで問題ありません。「utils」という名前のディレクトリを処理できますが、それは私を悩ませます... 十分です。

カスタム ページではなく Django 管理ページが読み込まれる原因は何ですか?

4

1 に答える 1

2

デフォルトでは、django は最初TEMPLATE_DIRSに「admin/index.html」の各パスをチェックします。そこに見つからない場合は、INSTALLED_APPS設定内の各アプリのテンプレート ディレクトリで検索を開始します。

'django.contrib.admin'が最初にリストされている場合INSTALLED_APPS、django.contrib.admin アプリの同じ名前の「admin/index.html」テンプレートが使用されます。

'django.contrib.admin'最後の位置に移動すると、INSTALLED_APPS最初に LobbyVisitorLog アプリで「admin/index.html」を見つけることができるはずですが、これにより、アプリの「admin/index.html」を使用することで管理サイトが壊れます、lobbyVisitorLog.

これを解決する良い方法は、アプリのテンプレート ディレクトリ内にアプリにちなんで名付けられたサブディレクトリを常に持つことです。例えば:

lobbyVisitorLog
  - templates
    - lobbyVisitorLog
      - admin
        - index.html

次に、ビューのテンプレート パスを更新します。

def adminView(request):
    return render(request, 'lobbyVisitorLog/admin/index.html', {}, context_instance=RequestContext(request))

Django がテンプレートをロードする方法の詳細については、こちらを参照してください。

于 2013-04-19T19:41:23.343 に答える