初学者Django:定义URL路径时遇到麻烦

时间:2014-03-02 18:55:43

标签: django url

我有一些Python的经验,但我对Django和Web开发很新。

我遇到了一个问题,我在其中设置了两个网址,但只会呈现其中一个网址:即网址格式列表中的第一个网址。 我刚刚开始,基本上,我现在所拥有的只是一个显示用户注册表单的页面,以及一个基本的“Hello,World”页面。

根据当前配置并运行开发服务器,无论是转到URL localhost:8000/mysite还是localhost:8000/registration,我都会进入注册表单页面。如果我在mysite / myapp / urls.py的urlpatterns列表中颠倒了两个的顺序,两个URL都会将我带到“Hello,World”页面。

我知道我一定做错了什么,但我似乎无法弄明白。谢谢!

mysite / myapp / urls.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'),
)

我的文件 mysite / urls.py 如下所示:

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

myapp / views.py 如下所示:

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,
    })

3 个答案:

答案 0 :(得分:1)

问题是您尝试使用与索引页面相同的网址格式(r'^ $')访问注册页面。所以你应该访问smt不同的注册页面。例如

urlpatterns = patterns('registration',
    url(r'^registeration/$', views.registration),
    url(r'^$', views.index, name='index'),
)

答案 1 :(得分:1)

将带有不同前缀的模式放入同一个包含的urlconf中是没有意义的。这意味着无法区分它们。请记住,所有发生的事情都是您的浏览器告诉Django“向我提供此URL中的内容”,因此Django需要为您要提供的每个不同视图提供不同的URL。

如果你想为两个没有前缀的URL提供服务,那么要么包含整个urlconf而不带前缀:

的mysite / urls.py:

url(r'', include('myapp.urls'),

myapp.urls.py:

url(r'^registration/$', views.registration, name='registration'),
url('r^index/$', views.index, name='index'),

或更简单,根本不需要包含特定于应用程序的urlconf,只需在mysite / urls.py中直接使用这两个url模式。

答案 2 :(得分:0)

您用于两者的正则表达式是相同的r'^$',您必须将网址更改为更一般的内容。这是因为url路由获取url标识与正则表达式匹配的文本,并重定向到它在元组中找到的第一个函数。

我建议家庭mysite/urls.py的网址为r'^$',注册的网址为r'^registration/$'

urlpatterns = patterns('', url(r'^registration/$', views.registration, name='registration'), url(r'^$', views.index, name='index'), )