我一直在尝试在django中开发一个简单的Web应用程序,但我遇到了一个错误。基本上,不接受在网址中传递的参数,我得到了
/ NECapp /的/ offers()只需要2个参数(给定1个) 完整跟踪应用程序的简要概述:用户输入邮政编码并获得与该值相关的对象列表。无论我修补什么,代码总是在这一点上突然出现不同的错误,所以我将在这里抛弃大部分代码。由于我尝试了很多东西,导入的代码可能不必要,也许在其他地方,所以要小心。
views.py
from django.shortcuts import render_to_response
from django.http import HttpResponse
from models import Offer, ZipCode
from django.http import HttpRequest
def index(request):
return render_to_response('NECapp/index.html')
def enterzipcode(request):
return render_to_response('NECapp/enterzipcode.html')
def offers(request, zip):
return HttpResponse('you entered %zip' %(zip))
应用的urls.py
from django.conf.urls import patterns, include, url
from django.views.generic import ListView
from NECapp.models import Offer
from NECapp import views
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('NECapp',
url(r'^$', 'views.index', name='index'),
url(r'^enterzip/$', 'views.enterzipcode', name='zipcode'),
url(r'^offers/(?P<zip>\d{5})/$', 'views.offers', name='offers'),
url(r'^offers/$', 'views.offers'),
)
我非常感谢任何帮助!
答案 0 :(得分:1)
出现错误是因为当您调用URL / NECapp / offers /?zip = 55104时,由于您已将zip作为查询字符串而非参数传递,因此第二个提供了URL模式,因为您没有给出任何默认参数显示错误。 异常值:offers()只需要2个参数(给定1个)
def offers(request, zip):
return HttpResponse('you entered %zip' %(zip))
你需要解决两件事:
1)根据您的网址格式,您的请求网址应为/ NECapp / offers / 55104 / 2)每当调用第二个URL模式时,您将收到错误。默认情况下将其固定为args。
def offers(request, zip=""):
return HttpResponse('you entered %zip' %(zip))
如果您尝试通过表单发布数据,请在表单标记中输入method =“POST”,并且您不需要两个URI模式,因为您的request.POST字典中将提供所有表单数据。 HTML:
<form action="/NECapp/offers/" method="post">
URLS.py:
url(r'^offers/$', 'views.offers'),
Views.py:\
def offers(request):
zip=request.POST.get("zip")
return HttpResponse('you entered %zip' %(zip))
答案 1 :(得分:0)
仔细查看你的urls.py
url(r'^offers/(?P<zip>\d{5})/$', 'views.offers', name='offers'),
与
冲突url(r'^offers/$', 'views.offers'),
HTH!
答案 2 :(得分:0)
要使其有效(NECapp/offers/
网址),您只需将默认值添加到zip
。
这是因为您在两种情况下执行views.offers
视图,具体取决于请求的URI:
/offers/
”之后有某些内容(您已通过邮政编码)时 - 为此,您的网址格式从末尾开始是第二个(name='offers'
),/offers/
”之后没有任何内容(为此你有最后一个网址格式)。您的观点与此类似:
def offers(request, zip=None):
if zip is None:
# No zip has been set (/offers/)
return HttpResponse('you did not enter anything')
else:
# Some zip has been set (/offers/some_zip)
return HttpResponse('you entered %zip' %(zip))
修改强>
Vivek正确地指出,您正在调用http://localhost:8000/NECapp/offers/?zip=55104
而不是http://localhost:8000/NECapp/offers/55104
。这就是为什么您将最后一个URI模式匹配(具有r'^offers/$'
规则的模式),并且在没有参数的情况下调用视图。如果您将使用我的解决方案,您将得到“you did not enter anything
”作为回应,因为您没有在URL中传递zip
(实际上您是,但在查询字符串中,您应该在主要传递它相反,如果您想使用您的URLconf,则为URL的一部分。
因此,简而言之,请使用我的解决方案并在网址中传递zip
:http://localhost:8000/NECapp/offers/55104
。或者,您可以使用zip
摆脱此模式,只需使用request.GET.get(zip)
从查询字符串中获取zip
。