4

マニュアルで説明されているように、デフォルトのAdminSiteクラスを上書きしましたが、この部分に関する情報は純粋すぎます。
私のgs/admin.pyファイル:

from django.contrib.admin import AdminSite
from django.conf.urls import patterns, url
from gs.views import *

class AdminSiteGs(AdminSite):

    def get_urls(self):
        urls = super(AdminSiteGs, self).get_urls()

        urls += patterns('',
             url(r'^my_admin_view/$', self.admin_view(my_admin_view))
        )

        return urls

admin_site_gs = AdminSiteGs()

gsそれは私のアプリケーションとプロジェクト名です。

gs / urls.pyファイル

from django.conf.urls import patterns, include, url
from page import views
from gs.admin import admin_site_gs

urlpatterns = patterns('',
    url(r'^admin/', include(admin_site_gs.urls)),
)

そして、 admin.pyファイルを配置するpageという名前のアプリケーションがあります。

from gs.admin import admin_site_gs
from page.models import Page, Menu
from django.contrib import admin

class PageAdmin(admin.ModelAdmin):
    list_display = ('name', 'url', 'page_type')

class MenuAdmin(admin.ModelAdmin):
    list_display = ('name', 'code')

admin_site_gs.register(Page, PageAdmin)
admin_site_gs.register(Menu, MenuAdmin)

したがって、ここでは何も機能していません=(/ admin / my_adminビュー(404を返します)もメイン管理ページ/adminもありません。page/admin.pyファイルに登録したモデルが表示されません。

楽しそうに聞こえるかもしれませんが、3〜4時間ですべてのスタッフを試してみました=))ご想像のとおり、私はDjangoとPythonの両方で完全に初心者です...今知りたいのは、カスタムURLとビューを追加する方法だけですAdminSiteのオーバーライドされたクラスに?

メソッドを削除したので、Djangoはファイルpage/admin.pyautodiscoverについて何も表示しないようです。

しかし、最初の質問はもっと興味深いものです。/admin/my_adminページにアクセスしようとすると404エラーが発生したのはなぜですか...

PS最初の挨拶がカットされた理由o_O

4

2 に答える 2

6

ドキュメントによると、カスタム管理ビュー用に定義するURLパターンは、管理パターンの前に発生する必要があります: https ://docs.djangoproject.com/en/1.4/ref/contrib/admin/#django.contrib.admin.ModelAdmin .get_urls

試す:

def get_urls(self):
    urls = super(AdminSiteGs, self).get_urls()

    my_urls = patterns('',
        url(r'^my_admin_view/$', self.admin_view(my_admin_view))
    )

    return my_urls + urls

次のようなパターンを含める必要はありません。

urlpatterns = patterns('',
    url(r'^admin/', include(admin_site_gs.urls)),  # not needed
)
于 2013-03-08T13:28:47.257 に答える
2

私の場合、管理者の「+追加」ボタンをクリックしたときにカスタムDjango管理ページにリダイレクトするために、デフォルトの「URLの追加」をオーバーライドする必要がありました。したがって、@ Brandonが言った方法でget_urls()をオーバーライドすると、重複する'add' URL(カスタムURLとスーパーから取得されたURL)を含むリストが返されます。

    def get_urls(self):
        info = self.model._meta.app_label, self.model._meta.model_name
        urls = super(RetailerAdmin, self).get_urls()
        # We need to remove the original 'add_url' in order to use the custom one.
        urls.remove(urls[1])
        custom_url = [
            url(r'^batch/$', self.admin_site.admin_view(self.batch_upload_retailers),
                name='%s_%s_add' % info),
        ]
        return custom_url + urls

これを解決するために、元の「add」URLを削除しました(「add」URLは常に位置1にあることに注意してください)。

于 2019-04-04T15:26:17.447 に答える