Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
初学者Django:难以定义URL路径_Django_Url - Fatal编程技术网

初学者Django:难以定义URL路径

初学者Django:难以定义URL路径,django,url,Django,Url,我有一些Python方面的经验,但我对Django和web开发一般来说是非常陌生的 我有一个问题,我已经设置了两个URL,但其中只有一个将被呈现:即URL模式列表中的第一个。 我才刚刚开始,所以基本上,我现在只有一个显示用户注册表的页面和一个基本的“Hello,World”页面 给定当前配置并运行开发服务器,无论我是转到URLlocalhost:8000/mysite还是localhost:8000/registration,我都会转到注册表单页面。如果我颠倒mysite/myapp/url.p

我有一些Python方面的经验,但我对Django和web开发一般来说是非常陌生的

我有一个问题,我已经设置了两个URL,但其中只有一个将被呈现:即URL模式列表中的第一个。 我才刚刚开始,所以基本上,我现在只有一个显示用户注册表的页面和一个基本的“Hello,World”页面

给定当前配置并运行开发服务器,无论我是转到URL
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()方法)。迄今为止,没有一个答案提供了这种解决办法。