首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django ModelForm模板?

Django ModelForm模板?
EN

Stack Overflow用户
提问于 2010-02-17 22:11:54
回答 2查看 17.1K关注 0票数 5

我想学习如何将模板添加到我的ModelForm中,我是新手。下面你可以看到我的models.py,url.py和views.py:

我的model.py是这样的:

代码语言:javascript
运行
复制
from django.db import models   
from django.forms import ModelForm
from django.contrib.auth.models import User

class Yazilar(models.Model):
    yazi = models.CharField(max_length=200)    
    temsilci = models.ForeignKey(User)

class YaziForm(ModelForm):        
    class Meta: 
        model = Yazilar

我的views.py函数如下:

代码语言:javascript
运行
复制
@login_required 
def yazi_ekle(request):
    yazim = YaziForm
    return render_to_response('yazi/save.html', {'YaziForm': YaziForm})

我的url.conf如下所示:

代码语言:javascript
运行
复制
(r'^yazi/save/$', 'tryout.yazi.views.yazi_ekle'),

我的问题是关于创建表单,以及表单的"action“参数是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-09 16:18:29

在我看来,你的问题在视图中,你应该这样做:

代码语言:javascript
运行
复制
@login_required
def yazi_ekle(request):
        yazim = YaziForm() # Look at the (), they are needed for instantiation
        return render_to_response('yazi/save.html', {'YaziForm': yazim}) # Sending the form instance to the context, not the form class

现在,您在模板上下文中有一个名为YaziForm的变量。Django将autorender格式化为一堆表格行,并默认使用小部件,因此在您的文件yazi/save.html中,执行以下操作

代码语言:javascript
运行
复制
<form method="post" action="">
{% csrf_token %}
<table>
{{YaziForm}}
</table>
<input type="submit" value="Submit Form"/>
</form>

这将自动将您的表单呈现为一个表,尽管您必须在POST下添加表单的逻辑。

票数 11
EN

Stack Overflow用户

发布于 2010-05-11 22:39:04

事实上,你可以使用<form action="">,因为你想要发布的url和你所在的页面是一样的。

如果你不喜欢这样,那么只要你在settings.py中的TEMPLATE_CONTEXT_PROCESSORS中有'django.core.context_processors.request‘,我想你也可以这样做:

代码语言:javascript
运行
复制
<form action="{{ request.path }}">

像往常一样,请参阅文档:)

http://docs.djangoproject.com/en/1.1/ref/request-response/#django.http.HttpRequest.path

编辑

以防万一,在这个问题发布后的一年里,发帖者仍然没有尝试阅读ModelForm文档……http://docs.djangoproject.com/en/1.2/topics/forms/modelforms/

是的,视图是错误的,您已经实例化了表单。您还需要一些逻辑来处理post数据。如果它是一个编辑视图,您可能还希望该视图接受视图args中的一个项目id,并具有加载该模型实例的一些逻辑。

例如:

代码语言:javascript
运行
复制
@login_required
def yazi_ekle(request, id=None):
    form_args = {}
    if id is not None:
        # edit an existing Yazilar
        try:
            yazilar = Yazilar.objects.get(pk=id)
        except Yazilar.DoesNotExist:
            return Http404('Yazilar not found')
        form_args['instance'] = yazilar
    # else create new Yazilar...        

    if request.POST:
        form_args['data'] = request.POST
        yazi_form = YaziForm(**form_args)
        if yazi_form.is_valid():
            yazilar = yazi_form.save(commit=True)
    else:
        yazi_form = YaziForm(**form_args)

    return render_to_response('yazi/save.html',
        {
            'yazi_form': yazi_form
        },
        context_instance=RequestContext(request)
    )

然后在你的urls.py中类似于:

代码语言:javascript
运行
复制
(r'^yazi/ekle/(?P<id>\d+)?$', 'tryout.yazi.views.yazi_ekle'),

在模板中:

代码语言:javascript
运行
复制
<form method="post" action="">
{% csrf_token %}<!-- required since Django 1.2 or later -->
<ul>
    {{ yazi_form.as_ul }}
</ul>
<input type="submit" value="Submit Form"/>
</form>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2281295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档