初学者Django:难以定义URL路径
我有一些Python方面的经验,但我对Django和web开发一般来说是非常陌生的 我有一个问题,我已经设置了两个URL,但其中只有一个将被呈现:即URL模式列表中的第一个。 我才刚刚开始,所以基本上,我现在只有一个显示用户注册表的页面和一个基本的“Hello,World”页面 给定当前配置并运行开发服务器,无论我是转到URL初学者Django:难以定义URL路径,django,url,Django,Url,我有一些Python方面的经验,但我对Django和web开发一般来说是非常陌生的 我有一个问题,我已经设置了两个URL,但其中只有一个将被呈现:即URL模式列表中的第一个。 我才刚刚开始,所以基本上,我现在只有一个显示用户注册表的页面和一个基本的“Hello,World”页面 给定当前配置并运行开发服务器,无论我是转到URLlocalhost:8000/mysite还是localhost:8000/registration,我都会转到注册表单页面。如果我颠倒mysite/myapp/url.p
localhost:8000/mysite
还是localhost:8000/registration
,我都会转到注册表单页面。如果我颠倒mysite/myapp/url.py中urlpatterns列表中的两个URL的顺序,两个URL都会将我带到“Hello,World”页面
我知道我一定是做错了什么,但我似乎不明白。谢谢
mysite/myapp/url.py如下所示:
from django.conf.urls import patterns, url
from myapp import views
urlpatterns = patterns('',
url(r'^$', views.registration, name='registration'),
url(r'^$', views.index, name='index'),
)
from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
url(r'^mysite/', include('myapp.urls')),
url(r'^registration/', include('myapp.urls')),
url(r'^admin/', include(admin.site.urls)),
)
from django.shortcuts import render
from django.http import HttpResponseRedirect, HttpResponse
from myapp.forms import UserRegistrationForm
def index(request):
return HttpResponse("Hello, world. You're at the main page for MySite!")
def registration(request):
if request.method == 'POST':
form = UserRegistrationForm(request.POST)
if form.is_valid():
# stuff gets done with form
return HttpResponseRedirect('/registration/')
else:
form = UserRegistrationForm()
return render(request, 'myapp/registration_form.html', {
'form': form,
})
我的文件mysite/url.py如下所示:
from django.conf.urls import patterns, url
from myapp import views
urlpatterns = patterns('',
url(r'^$', views.registration, name='registration'),
url(r'^$', views.index, name='index'),
)
from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
url(r'^mysite/', include('myapp.urls')),
url(r'^registration/', include('myapp.urls')),
url(r'^admin/', include(admin.site.urls)),
)
from django.shortcuts import render
from django.http import HttpResponseRedirect, HttpResponse
from myapp.forms import UserRegistrationForm
def index(request):
return HttpResponse("Hello, world. You're at the main page for MySite!")
def registration(request):
if request.method == 'POST':
form = UserRegistrationForm(request.POST)
if form.is_valid():
# stuff gets done with form
return HttpResponseRedirect('/registration/')
else:
form = UserRegistrationForm()
return render(request, 'myapp/registration_form.html', {
'form': form,
})
而myapp/views.py看起来是这样的:
from django.conf.urls import patterns, url
from myapp import views
urlpatterns = patterns('',
url(r'^$', views.registration, name='registration'),
url(r'^$', views.index, name='index'),
)
from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
url(r'^mysite/', include('myapp.urls')),
url(r'^registration/', include('myapp.urls')),
url(r'^admin/', include(admin.site.urls)),
)
from django.shortcuts import render
from django.http import HttpResponseRedirect, HttpResponse
from myapp.forms import UserRegistrationForm
def index(request):
return HttpResponse("Hello, world. You're at the main page for MySite!")
def registration(request):
if request.method == 'POST':
form = UserRegistrationForm(request.POST)
if form.is_valid():
# stuff gets done with form
return HttpResponseRedirect('/registration/')
else:
form = UserRegistrationForm()
return render(request, 'myapp/registration_form.html', {
'form': form,
})
用于两者的正则表达式是相同的
r'^$'
,必须将URL更改为更一般的URL。这是因为url路由获取url标识与正则表达式匹配的文本,并重定向到它在元组中找到的第一个函数
我建议将mysite/url.py
的url设置为r'^$'
,将注册设置为r'^registration/$”
urlpatterns=patterns(“”,
url(r“^registration/$”,views.registration,name='registration'),
url(r'^$',views.index,name='index'),
)
问题在于,您试图使用与索引页相同的url模式(r'^$)访问注册页。所以你应该访问注册页面与smt不同。比如说
urlpatterns = patterns('registration',
url(r'^registeration/$', views.registration),
url(r'^$', views.index, name='index'),
)
将带有不同前缀的模式放在同一个包含的urlconf中没有意义。这意味着无法区分它们。记住,所有发生的事情都是你的浏览器告诉Django“在这个URL上为我提供内容”,所以Django需要为你想要提供的每个不同的视图提供一个不同的URL 如果要为两个URL提供不带前缀的服务,则可以包括整个urlconf(不带前缀): mysite/url.py:
url(r'', include('myapp.urls'),
myapp.url.py:
url(r'^registration/$', views.registration, name='registration'),
url('r^index/$', views.index, name='index'),
或者,更简单的是,根本不需要包含特定于应用程序的urlconf,直接在mysite/url.py中使用这两种url模式。这似乎不起作用。当我现在更改这两个路径时,只需将我带到mysite/page(index()函数),我编辑了我的答案,尝试在
mysite/url.py
上使用以下配置,这与下面的答案相同,不起作用。使用此解决方案,两个URL都不调用registration()函数,而是调用index()函数。是否确实按照建议编辑了mysite/URLs.py
上的URL?我不确定是否遵循了。我想使用localhost:8000/registration访问注册页面(视图中的registration()方法),使用localhost:8000/mysite访问“Hello,World”页面(视图中的index()方法)。迄今为止,没有一个答案提供了这种解决办法。