我有一个停靠点列表:
<select name="dropdown">
{% for stop in stop_list %}
<option value ="{{ stop.name }}">{{ stop.name }}</option>
{% endfor %}
</select>
和一个Stops模型,其中一个属性是名称。
我的views.py中也有一个方法find_direction(),需要stop.location输入。
如何记录所选stop.name的值,以便我可以获得要在views.py中使用的stop.location?
谢谢!
目前我的方法是:
def find_direction(request, stop1name, stop2name):
stop1 = get_object_or_404(Stops, name=stop1name)
stop2 = get_object_or_404(Stops, name=stop2name)
给出错误:find_direction()缺少2个必需的位置参数:&#39; stop1&#39;和&#39; stop2name&#39; ..如何从选定的下拉列表中正确记录这两个变量?
使用表格,但由于某种原因..
print(request.GET.get("stop1id", "default_value"))
print(request.GET.get("stop2id", "default_value"))
print(request.method)
print(request.POST.dict())
print(request.GET.dict())
print(request.body)
全部返回空
答案 0 :(得分:0)
根据您的更新,您最希望在请求中传递数据:
def find_direction(request):
stop1 = get_object_or_404(Stops, name=request.POST.get("stop1name","default_value"))
stop2 = get_object_or_404(Stops, name=request.POST.get("stop2name","default_value"))
这假设您要使用停止名称数据将表单中的POST
请求发送回服务器。字典键stop1name
和stop2name
应与您在表单中设置的名称相匹配:
<form action="/get_stop_locations">
<select name="stop1name">
{% for stop in stop_list %}
<option value ="{{ stop.name }}">{{ stop.name }}</option>
{% endfor %}
</select>
<select name="stop2name">
{% for stop in stop_list %}
<option value ="{{ stop.name }}">{{ stop.name }}</option>
{% endfor %}
</select>
</form>
如果您感到好奇,则收到错误,因为django视图的位置参数被设置为URL的捕获位:
<强> urls.py 强>
urlpatterns = patterns('django_app.views',
url(r'^get_stop_locations/(\w+)/(\w+)$','positional_get_locations'),
)
<强> views.py 强>
def positional_get_locations(request,stop1name,stop2name):
stop1 = get_object_or_404(Stops, name=stop1name)
stop2 = get_object_or_404(Stops, name=stop2name)
Django视图默认需要一个参数来存储请求对象。当定义了更多视图时,视图需要url处理程序提供更多参数。如果网址未设置为在 urls.py 文件中提取尽可能多的参数,则会看到此错误。
对于您的情况,这需要在客户端设置一些棘手的URL,我不推荐它。有关Django视图中位置参数的更多信息,请参阅此example in the DJango Docs。
修改强>:
在回复您的MultiValueDictKeyError
时,请尝试:
def find_direction(request):
stop1 = get_object_or_404(Stops, name=request.POST.get("stop1name","default_value"))
stop2 = get_object_or_404(Stops, name=request.POST.get("stop2name","default_value"))
答案 1 :(得分:0)
如果您的下拉列表位于以下格式:
<form method="post" action="">
<select name="dropdown">
{% for stop in stop_list %}
<option value ="{{ stop.name }}">{{ stop.name }}</option>
{% endfor %}
</select>
<input type="submit" />
</form>
您可以通过在视图中定义以下内容来get
值:
def post(self, request, *args, **kwargs):
if 'dropdown' in request.POST:
dropdown_val = request.POST.get('dropdown', False)