返回下拉列表中所选内容的字符串值

时间:2015-04-07 20:36:19

标签: python html django

我有一个停靠点列表:

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

全部返回空

2 个答案:

答案 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请求发送回服务器。字典键stop1namestop2name应与您在表单中设置的名称相匹配:

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