如何在不使用 django-forms 的情况下设置 html 表单字段。
问问题
150 次
2 回答
2
如果您不想使用django.forms
,而是从模型中获取数据并将其显示为 html 表单,则可以执行以下操作:
视图.py
from django.shortcuts import render_to_response, redirect
from myApp.models import MyModel
def editForm(request, model_pk):
model = MyModel.objects.get(pk=model_pk)
return render_to_response('formUpdate.html',{ 'model' : model })
def updateForm(request, model_pk):
model = MyModel.objects.get(pk=model_pk)
model.firstname = request.POST['firstname']
model.lastname = request.POST['lastname']
model.save()
return redirect('home', message='your name has been updated')
模板 - formUpdate.html
{% extends "base.html" %}
{% block content %}
<form action="/updateForm/{{ model.id }}/" method="post">
First name: <input type="text" name="firstname" value="{{ model.firstname }}" /><br />
Last name: <input type="text" name="lastname" value="{{ model.lastname }}" /><br />
<input type="submit" value="submit" />
</form>
{% end block %}
模型.py
from django.db import models
class MyModel(models.Model):
firstname = models.CharField(max_length=20)
lastname = models.CharField(max_length=20)
网址.py
from django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'^$', 'views.home', name="home"),
(r'^editForm/(?P<model_pk>\d+)/$', 'views.editForm'),
(r'^updateForm/(?P<model_pk>\d+)/$', 'views.updateForm'),
)
这与在 PHP 或类似中处理表单的方式非常相似,它model
被传递到呈现现有值的模板中。模型的id
or pk
(主键)通过 URL 传递给视图,然后更新值然后返回到POST
数据中的存储视图,在那里可以检索它们并将更新的值存储在数据库中。
Django 的优点之一是它如何平衡开发速度和可插入性——几乎它的任何部分都可以替换或更改。
说了这么多,有不想用的理由django.forms
吗?据我了解,aform
只是为您完成了上面示例中的大部分艰苦工作,这就是django.forms
目的。它们还具有其他功能,可帮助防止恶意访问您的 Web 应用程序,例如 OOTB。创建 ajax 辅助方法来检索和更新它们也相当容易。
于 2013-11-10T19:25:39.810 回答
0
您可以像在 html 中创建普通表单一样执行此操作。只是要小心放置{% csrf_token %}
。和表单name
中input
的 ,因为它们将在视图中使用。
例如:
<form method="post" action="#the url for the view">
{% csrf_token %}
...
...
<!-- fields that you want Eg: -->
<label for="username">User name:</label>
<input type="text" name="username" id="username" />
...
...
<input type="submit" value="Submit" />
</form>
希望这有帮助。
于 2013-11-10T18:47:21.110 回答