Django,urls.py,include似乎没有工作

时间:2011-10-11 22:17:33

标签: python django django-urls

我正在尝试在我的主网址中包含额外的urls.py - 但它似乎不起作用。我做了很多搜索,我似乎无法弄清楚

main urls.py文件 - 管理员工作正常

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

from django.contrib import admin
admin.autodiscover()

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

然后我有一个文件夹pnasser,文件urls.py包含以下内容:

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

urlpatterns = patterns('pnasser.views',
        (r'^$','index'),
        (r'^login/$','login'),
        (r'^signup/$','signup'),
        (r'^insertaccount/$','insertaccount'),
        (r'^home/$','home'),
        (r'^update/(?P<accid>\d+)','update'),
        (r'^history/(?P<accid>\d+)','account_history'),
        (r'^logout/(?P<accid>\d+)','logout'),

)

我不确定我是否可能在配置中遗漏了其他内容。如果我访问mysite.com/admin它会正确加载管理员,如果我在视图中转到mysite或任何其他网址,我会找不到404页面:

  

使用mysite.urls中定义的URLconf,Django尝试了这些URL   模式,按此顺序:   1. ^ pnasser /   2. ^ admin /

     

当前网址与其中任何一个都不匹配。

修改 settings.py已安装的应用:

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    #'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
     'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
        'pnasser',

)

更新2

所以,我也尝试通过开发服务器运行我的网站:python manage.py runserver 0.0.0.0:8000这有效。我假设我使用mod_wsgi与apache集成的某个地方是问题所在。但是,我不确定问题出在哪里

6 个答案:

答案 0 :(得分:3)

问题似乎在django.wsgi文件中 - 以及标准django.wsgi文件如何加载python站点与开发服务器如何加载站点的区别。我想这是一个众所周知的问题,我不知道。感谢大家的建议。

在此处找到替代django.wsgi文件:http://blog.dscpl.com.au/2010/03/improved-wsgi-script-for-use-with.html

答案 1 :(得分:1)

from django.contrib import admin,include
admin.autodiscover()

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

也许你错过了第一行的“包含”

答案 2 :(得分:1)

问题是你正在使用一个空的正则表达式("^"将匹配任何东西,包括一个空的url)来处理一个include指令。如果这样做,它将始终在您的请求路径上附加第一个斜杠。考虑到你的pnasser.urls不包含“/”的正则表达式,mysite.com上的请求不匹配。

如果您希望mysite.com或mysite.com/带您进入pnasser“索引”视图,您需要具备以下内容:

from django.contrib import admin

from pnasser.views import index

admin.autodiscover()


urlpatterns = patterns('',
    (r'^/?$', index),
    (r'^pnasser/',include('pnasser.urls')),
    (r'^admin/',include(admin.site.urls)),
)

所以,你有:

  • mysite.com =&gt; pnasser.views.index
  • mysite.com/ =&gt; pnasser.views.index
  • mysite.com/admin =&gt;管理页面
  • mysite.com/pnasser/ =&gt; pnasser.views.index
  • mysite.com/pnasser/home =&gt; pnasser.views.home

如果这不起作用,请确保您已安装Django's CommonMiddleware,并让您拥有APPEND_SLASH = True(这是默认设置,因此如果您不这样做,则不需要这么做在settings.py文件中找不到它。

答案 3 :(得分:0)

Using the URLconf defined in mysite.urls, Django tried these
URL patterns, in this order:

此错误消息应列出所有可能的网址,包括来自您的pnasser应用的“扩展”网址。由于您只是从主urls.py获取网址,因此表示您未在settings.py的pnasser中正确启用INSTALLED_APPS应用。

答案 4 :(得分:0)

在您的网址文件中,您可以编写如下内容。 + =显然允许我们在'urlpatterns'变量中添加额外的'模式',这也意味着我们可以将它们包装在'if'语句中。

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

urlpatterns += patterns('',
    (r'^api/', include('api.urls')),
)

if settings.SHOP_TOGGLE:
    urlpatterns += patterns('',
        (r'^shop/', include('shop.urls')),)
    )

答案 5 :(得分:-1)

以下适用于我:

  

如果您的网址无法正常使用,则可能需要添加此行   到位置/:

fastcgi_split_path_info ^()(.*)$;

来自:https://code.djangoproject.com/wiki/DjangoAndNginx