【问题标题】:Django Admin Page Links BrokenDjango 管理页面链接损坏
【发布时间】:2014-05-23 17:45:14
【问题描述】:

我在 Apache 上运行 Django(在 localhost 上)。管理页面工作正常,我的问题是这个页面上的每个链接。由于托管在我们服务器上的共享房间使用 /admin/,为了访问我的 Django 管理页面,我必须在 urls.py 中更改以下内容:

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

urlpatterns = patterns('',
    url(r'/control/', include(admin.site.urls)),
)

但是,现在当我点击页面上的任何链接(例如Auth 下的Groups)时,它会将我带到浏览器中的control/auth/group/,而不是http://localhost/django_ngs/control/auth/group/。更改网址后,我必须缺少与管理员的连接。我必须附加 url 的项目部分,但不确定如何。有任何想法吗?提前谢谢你。

编辑:基本上它不会将目标附加到当前链接。链接指向control/auth/group/ 而不是http://localhost/django_ngs/control/auth/group//control/auth/group/

编辑 2: 我只能使用 r'/control/' 格式(前面有一个斜线)访问我的管理页面,而它应该是 r'^control/',前面有一个胡萝卜。这可能与我的问题有关(感谢 knbk)有什么想法吗?

编辑3:这是我的全部urls.py

 from django.conf.urls import patterns, include, url
 from django.contrib import admin
 # Uncomment the next two lines to enable the admin:
 from django.contrib import admin
 admin.autodiscover()

 urlpatterns = patterns('',
     url(r'/control/', include(admin.site.urls)),
 )

当我使用胡萝卜进入管理页面时,我得到了这个:

【问题讨论】:

  • 不知道是否与您的问题有关,但您的网址格式不应以斜杠开头,应为r'^control/'
  • @knbk 有趣的是你提出来了......当我将其更改为那个时,我无法访问管理页面。它给了我一个 404。它只适用于前面的正斜杠而不是胡萝卜。有任何想法吗?这可能是我的问题......
  • 这个 url 配置是否包含在另一个配置中?如果是这样,您可以发布完整的 urlpatterns 吗?
  • @knbk 我刚刚编辑并发布了我的整个文件。

标签: python django url localhost admin


【解决方案1】:

您的问题在于您的网址的 django_ngs/ 前缀。 Django 对此一无所知,并且所有 url 模式都是根相关的。

现在,字符串 django_ngs/control/ 匹配正则表达式 r'/control/'。如果您在正则表达式 (r'^control/') 中包含一个胡萝卜,则您需要字符串以提供的模式开头。这通常是您想要的。例如。如果您稍后在/something/ 下添加所有url 的另一个应用程序,并且您需要在该应用程序中添加一个名为/something/control/ 的页面,该url 仍将仅匹配第一个根级页面,而不是@987654327 中的第二个页面@。

您的链接被破坏的原因是因为 Django 将 url 模式反转回 url,但该模式没有以任何方式描述 django_ngs/ 前缀。因此,它在生成的 url 中被遗漏了。

这里有两种解决方案。要么在每个模式前加上 django_ngs/,即:

url(r'^django_ngs/control/', include(admin.site.urls)),

或者您可以将完整的 url 配置移动到另一个文件中,并将其包含在 django_ngs/ 下的主 url 配置中:

url(r'^django_ngs/', include(myproject.other.file)),

【讨论】:

  • 很棒的发现。非常感谢!这让我困惑了好几个小时。非常感谢。