Django 如何定义主页 URL 的默认应用程序?
Django how to define default app for home URL?
我正在学习 Django,到目前为止我总是不得不使用 URL 之类的
projectname/appname/viewname
但是如果我不希望 appname
出现在 "default" 应用程序的 URL 中怎么办,我该如何配置我的网址以便
projectname/viewname
将从我的默认应用加载视图 viewname
?
P.S. :当然,我的主要目标是能够使用 URL projectname/
加载默认视图默认应用程序。
详情
目前我的 ProjectName/urls.py 有这个:
urlpatterns = patterns('',
url(r'^static/(?P<path>.*)$', 'django.views.static.serve',
{'document_root', settings.STATIC_ROOT}
),
url(r'^admin/', include(admin.site.urls)),
url(r'^myapp1/', include('myapp1.urls', namespace='myapp1', app_name='myapp1')),
url(r'^myapp2/', include('myapp2.urls', namespace='myapp2', app_name='myapp2')),
)
所以当我将我的项目部署到 Heroku 并访问 myproject.heroku.com
时,我收到错误:
Page not found (404)
Request Method: GET
Request URL: https://myproject.herokuapp.com/
Using the URLconf defined in MyProject.urls, Django tried these URL patterns, in this order:
^static/(?P<path>.*)$
^admin/
^myapp1/
^myapp2/
我知道这是应该的,但我该如何修复(或破解)它才能让 myproject.heroku.com
正常工作?
如果不可行,如何将主页重定向到 myproject/myapp1/defaultview
?
提前致谢!
我的应用程序的 urls.py 看起来像这样:
urlpatterns = patterns('myapp1.views',
url(r'^view1/$', 'view1', name='view1'), # the default view
url(r'^view2/(?P<oid>\d+)/(?P<pid>\d+)/$', 'view2', name='view2'),
)
编辑
在尝试@Wallace 的建议 url(r'^$', include('myapp1.urls', namespace='myapp1', app_name='myapp1')),
并点击主页后,我现在收到错误消息:
Using the URLconf defined in myproject.urls, Django tried these URL patterns, in this order:
^static/(?P<path>.*)$
^admin/
^$ ^view1/$ [name='view1']
^$ ^view2/(?P<oid>\d+)/(?P<pid>\d+)/$ [name='view2']
^myapp2/
尝试不在正则表达式中包含您的应用程序名称。
url(r'', include('myapp1.urls', namespace='myapp1', app_name='myapp1')),
尝试将您的项目 urls.py
更改为:
url(r'', include('myapp1.urls', ...)
这将包括来自 myapp1.urls
的所有 url,它们都附加到 /
。
r'^$'
不起作用的原因是因为正则表达式以 $
结尾,这意味着只能有 1 x url /
,并且因为你的app1.urls
只定义了 2 个 url 并且没有 /
或 ^$
等价物,url 解析器将失败。
但是 注意 的 url 冲突,如果您的项目有 ^view1/$
url 它会与您的 app1
的 view1
例如。
我正在学习 Django,到目前为止我总是不得不使用 URL 之类的
projectname/appname/viewname
但是如果我不希望 appname
出现在 "default" 应用程序的 URL 中怎么办,我该如何配置我的网址以便
projectname/viewname
将从我的默认应用加载视图 viewname
?
P.S. :当然,我的主要目标是能够使用 URL projectname/
加载默认视图默认应用程序。
详情
目前我的 ProjectName/urls.py 有这个:
urlpatterns = patterns('',
url(r'^static/(?P<path>.*)$', 'django.views.static.serve',
{'document_root', settings.STATIC_ROOT}
),
url(r'^admin/', include(admin.site.urls)),
url(r'^myapp1/', include('myapp1.urls', namespace='myapp1', app_name='myapp1')),
url(r'^myapp2/', include('myapp2.urls', namespace='myapp2', app_name='myapp2')),
)
所以当我将我的项目部署到 Heroku 并访问 myproject.heroku.com
时,我收到错误:
Page not found (404)
Request Method: GET
Request URL: https://myproject.herokuapp.com/
Using the URLconf defined in MyProject.urls, Django tried these URL patterns, in this order:
^static/(?P<path>.*)$
^admin/
^myapp1/
^myapp2/
我知道这是应该的,但我该如何修复(或破解)它才能让 myproject.heroku.com
正常工作?
如果不可行,如何将主页重定向到 myproject/myapp1/defaultview
?
提前致谢!
我的应用程序的 urls.py 看起来像这样:
urlpatterns = patterns('myapp1.views',
url(r'^view1/$', 'view1', name='view1'), # the default view
url(r'^view2/(?P<oid>\d+)/(?P<pid>\d+)/$', 'view2', name='view2'),
)
编辑
在尝试@Wallace 的建议 url(r'^$', include('myapp1.urls', namespace='myapp1', app_name='myapp1')),
并点击主页后,我现在收到错误消息:
Using the URLconf defined in myproject.urls, Django tried these URL patterns, in this order:
^static/(?P<path>.*)$
^admin/
^$ ^view1/$ [name='view1']
^$ ^view2/(?P<oid>\d+)/(?P<pid>\d+)/$ [name='view2']
^myapp2/
尝试不在正则表达式中包含您的应用程序名称。
url(r'', include('myapp1.urls', namespace='myapp1', app_name='myapp1')),
尝试将您的项目 urls.py
更改为:
url(r'', include('myapp1.urls', ...)
这将包括来自 myapp1.urls
的所有 url,它们都附加到 /
。
r'^$'
不起作用的原因是因为正则表达式以 $
结尾,这意味着只能有 1 x url /
,并且因为你的app1.urls
只定义了 2 个 url 并且没有 /
或 ^$
等价物,url 解析器将失败。
但是 注意 的 url 冲突,如果您的项目有 ^view1/$
url 它会与您的 app1
的 view1
例如。