Skip to main content
 首页 » 编程设计

python之在 Django 中使用方法 ="get"创建表单

2024年10月24日34unruledboy

我有一个包含两种文本输入类型的表单。两种形式的值都传递给 View myfunc,然后将其传递给另一个模板。表单结果的 url 应该是

/app/1/new_page/?key=key&value=value

但是在提交表单时,它会转到以下 url -

/app/1/new_page/?csrfmiddlewaretoken=CpYebRXTmLkHfo6hRQSrfZPdMFjWW9Ri&key=a1&value=41325 

并给出错误 -

Exception Type:     TemplateDoesNotExist 
Exception Value:    <WSGIRequest: GET '/app/1/new_page/?csrfmiddlewaretoken=CpYebRXTmLkHfo6hRQSrfZPdMFjWW9Rikey=a1&value=41325'> 

即使手动输入正确的 url 也会给出相同的异常类型和值

但是我已经在 View 中声明了模板。这里可能是什么问题?

包含表单的模板

<form action="{% url 'my_func' id %}" method="GET"> 
    {% csrf_token %} 
    <input id="key" type="text" name="key" value=""> 
    <input id="value" type="text" name="value" value=""> 
    <input type="submit" value="Submit" /> 
</form> 

views.py

def myfunc(request, id): 
    key = request.GET.get('key') 
    value = request.GET.get('value') 
    context = {'key': key} 
    return render_to_response(request,'template.html', context) 

urls.py

url(r'^app/(?P<id>\d+)/new-page/$', views.myfunc, name="my_func"), 

请您参考如下方法:

这与表单或 GET 无关。

您已经使用了 render_to_response 快捷方式,它采用两个位置参数:模板和上下文。但是你传递了三个参数,把请求放在第一位;该快捷方式不接受请求。

我认为您打算只使用 render 快捷方式,它确实首先接受请求。

return render(request,'template.html', context)