大约一周前开始学习django并碰壁。非常感谢任何启蒙......
models.py
<br>
HTML
将models.course中的对象转换为schlist
class data(models.Model):
course = models.CharField(max_length = 250)
def __str__(self):
return self.course
urls.py(怀疑我是否有效......)
<link rel="stylesheet" type="text/css" href="{% static '/chosen/chosen.css' %}" />
<form action={% views.process %} method="GET">
<div>
<h4 style="font-family:verdana;">First Course: </h4>
<select data-placeholder="Course" style="width:350px;" class="chosen-select" tabindex="7">
<option value=""></option>
{% for item in schlist %}
<option> {{ item }} </option>
{% endfor %}
</select>
</div>
</br>
<div>
<h4 style="font-family:verdana;">Second Course:</h4>
<select data-placeholder="Course" style="width:350px;" class="chosen-select" tabindex="7">
<option value=""></option>
{% for item in schlist %}
<option> {{ item }} </option>
{% endfor %}
</select>
</div>
</br>
<input type="submit" value="Compare!" />
</form>
view.py
urlpatterns = [
url(r'^(\d+)/(\d+)$',views.process, name = 'process'),
]
想知道表单操作是否可以将操作指向
(1)view.py或(2)url.py(最终到了view.py)选择了2个参数?
如果是这样,表格行动应该如何? {{view?}}或{{url?}}。我在HTML中错过了参数的定义吗?
指向views.py:
用户输入是CharField,可以使用get_object_or_404来获取模型pk。但是在定义我的urls.py时,我会得到一个Noreverse错误,因为我的url参数是主键。
指向urls.py:
Url参数是主键。从我看到它的方式,我需要神奇地将我的用户输入Charfield转换为pk,然后将其传递给urls.py
django中的get()是否有(或)函数?例如get_object_or_404(pk = q1或course = q1)?
非常感谢任何建议。几个小时一直在盯着这个。
答案 0 :(得分:11)
您正在尝试在Django中使用URL的反向解析。
在你的html文件中,正确的表单操作url如下所示,方法应该是POST:
<form action={% url 'process' %} method="POST">
如果您尝试传递参数,请使用此:
<form action={% url 'process' request.user.id 4 %} method="POST">
参考: https://docs.djangoproject.com/en/1.10/topics/http/urls/
答案 1 :(得分:8)
是的,我来晚了,但是它可以帮助其他人更好地了解Django如何处理请求。
Django 3.0模式
Django如何处理请求
基本:
详细阅读:
Official Django Documentations How Django processes a request
这些是您的网址格式:
urlpatterns = [ path('profile/edit/<int:pk>/',views.editprofile, name='editprofile'),]
如果您要将url模式从当前更改为,则urlpatterns中的第三个参数:
urlpatterns = [ url('profile/edit/user/id/<int:pk>',views.editprofile, name = 'editprofile'),]
您不需要在所有使用url名称的模板中重新定义url模式。
例如:
这是我的模板 profile.html ,其中我使用的是网址名称,而不是硬编码的网址。
<a class="item" href="{% url 'editprofile' user.id %}" >Edit profile </a>
您的问题的解决方案:
.html
仅在模板中使用url名称而不是硬编码url并传递参数。
<form action={% process no_of_arguments %} method="POST">
views.py
在这里您可以处理您的请求
def process(request,no_of_arguments):
成为优秀的Django开发人员
您还可以将Django ModelForms用于模型。 使用模型表单或简单表单,您可以做很多事情