Django管理页面链接破碎

时间:2014-05-23 17:45:15

标签: python django url localhost admin

我在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)),
)

但是,现在当我点击页面上的任何链接(例如Groups下的Auth)时,它会将我带到浏览器中的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)),
 )

当我使用胡萝卜进入管理页面时,我明白了:

1 个答案:

答案 0 :(得分:1)

您的问题位于您网址的django_ngs/前缀中。 Django并不了解它,所有url模式都是root-relative。

现在,字符串django_ngs/control/与正则表达式r'/control/'匹配。如果在正则表达式(r'^control/')中包含carot,则需要以提供的模式开头。这通常是你想要的。例如。如果您稍后在/something/下添加了包含所有网址的其他应用,并且您需要在该应用中添加名为/something/control/的网页,则网址仍然只会匹配第一个根级网页,而不是第二个/something/中的页面。

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

这里有两个解决方案。要么为每个模式添加django_ngs/前缀,即:

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

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

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