【问题标题】:Modifying and creating sites in djangos admin app在 djangos 管理应用程序中修改和创建站点
【发布时间】:2014-05-03 15:21:41
【问题描述】:

我必须对 djangos 管理面板进行多项更改,因此我决定将 django 管理应用程序分叉到我自己的 django 项目中。

当我使用这个管理应用程序时,我认识到,站点注册和模板处理与通常在 django 中创建的应用程序不同。 例如,出于备份和安全原因,我想保留旧的管理 index.html 模板和视图,但登录页面应替换为自定义页面。

为此,我当然需要分别更改 admin/templates/index.html 和 /admin/sites.py。

我将 admin/sites.py 中的旧索引函数复制到 old_index.py 并在模板文件夹中创建了 old_index.html。

但是如果我尝试在我的新 index.html 中引用 old_index.html

<a href="{% url 'admin:old_index' %}">old index</a>

我抛出了一个 NoReverseMatch-Exception。不幸的是,我没有找到有关 django 管理应用程序本身如何注册新视图和站点的更多信息,因此示例或描述会有所帮助。

在我的项目中为不同的其他应用程序中的管理应用程序创建单独的视图并不是真正的选择,因为需要进行大量更改。

主要的urls.py

from django.conf.urls import patterns, include, url

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'django_project.views.home', name='home'),
    url(r'^polls/', include('other_app.urls', namespace="other_app")),
    url(r'^admin/', include(admin.site.urls)),
)

管理应用程序本身不提供 urls.py 文件,views.py 与 django.contrib.admin 中的完全相同。我只是将函数索引复制到一个名为 old_index 的新函数中,引用模板 old_index。 html。

也许这一点并没有像我预期的那样清楚。我在我的项目中复制了整个管理应用程序,并希望在其中添加一个自定义站点,无论在哪里。但是我不明白站点和视图是如何在管理应用程序本身中注册的,因为这种方式与您通常在 django 中创建的自定义应用程序不同。

那么,是否可以(以及如何)在 django.contrib.admin 应用中添加自定义站点?

【问题讨论】:

  • 添加更多内容会很有帮助,例如您的urls.py(主要和应用程序)和可能的views.py。你能把它粘贴进去吗?

标签: python django


【解决方案1】:

我认为您需要为自定义目的创建自己的 AdminSite 并保持默认状态。您可以在这里找到更多相关信息:https://docs.djangoproject.com/en/1.6/ref/contrib/admin/#adminsite-objects 和这里https://docs.djangoproject.com/en/dev/ref/contrib/admin/#multiple-admin-sites-in-the-same-urlconf

更新:

您需要编辑 AdminSite 类的 get_urls 方法 - 添加:

url(r'^$', wrap(self.old_index), name='old_index')

到 urlpatterns 变量。并将旧索引方法重命名为 old_index。

【讨论】:

  • 我考虑过这个,但我不想自己再为custom-admin编写所有功能,所以我尝试使用和自定义django的contrib-admin应用程序。
  • 您需要修改 AdminSite 的 get_urls 方法 - 查看答案更新。
  • 我这样做并引用了一个 nee 模板文件,但我仍然从 django 获得 NoReverseMatch 异常。 Tor 我似乎一切都在正确的地方。
  • 我在 url 中犯了错误 - '^$' 必须更改为其他一些 url。请尝试更正此问题并尝试是否对您有帮助。
  • 感谢您的更新。我改变了这一点并认识到,我的管理应用程序仍在从 django.contrib.admin 导入站点和 AdminSites,而不是从本地应用程序。当我将导入更改为本地应用程序时,我在管理应用程序中失去了权限并收到消息“您无权编辑任何内容”。我将尝试弄清楚如何正确地分叉管理应用程序以最终回答这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-18
  • 2011-01-24
  • 2019-03-03
  • 1970-01-01
  • 1970-01-01
  • 2013-01-20
  • 1970-01-01
相关资源
最近更新 更多