2013-08-15 19:43:01|

 
      1.URL配置和视图
"blog\urls.py"文件中:添加url(r'write_article/$', 'write_article'), 
“blog\views.py”文件中:
def write_article(request, article_id=0):
    """写日志"""
    c = {}
    try:
        article = Article.objects.get(id=article_id)
    except Article.DoesNotExist:
        article = Article()
    if request.method == 'POST': # 如果form被提交
        form = ArticleForm(request.POST) # A form bound to the POST data
        # form.populate()
        if form.is_valid():  # All validation rules pass
            article.title = form.cleaned_data['title']
            article.body = form.cleaned_data['body']
            article.group = form.cleaned_data['group']
            article.save()
            return render_to_response('blogs_display.html',)  # Redirect after POST
        else:
            c['form'] = form
            return render_to_response("write_article.html", c, context_instance=RequestContext(request))
    else:
        if article.id:
            data = {}
            data['title'] = article.title
            data['body'] = article.body
            data['group'] = article.group
            form = ArticleForm(data)
        else:
            form = ArticleForm() # An unbound form
    c['form'] = form
    return render_to_response('write_article.html', c, context_instance=RequestContext(request))
 
        2.建立表单

      新建文件"blog\forms.py",用于存放与blog相关的表单。
# -*- coding:utf-8 -*-
from django import forms
from models import Article, Group
class ArticleForm(forms.Form):
    """日志表单"""
    title = forms.CharField(max_length=30, required=True, label=u'标题',
        error_messages={'max_length':'标题太长了,不如放在内容里面吧', 'required':'忘记写标题了'})
    body = forms.CharField(max_length=1000, required=True, label=u'内容',
        error_messages={'max_length':'内容太长了', 'required':'忘记写内容了'})
    group_list = forms.ModelChoiceField(widget=forms.Select(), queryset=None, 
        empty_label=None, required=False, label=u'分类', 
        error_messages={'required':'文章没有分类'})
    class  Meta:
        model = Article            
    def __init__(self, *args, **kwargs):
        super(ArticleForm, self).__init__(*args, **kwargs)
        self.fields['group_list'].queryset = Group.objects.all()
 
3.模板
"blog\templates\write_article.html"文件中:
{% extends "base.html" %}
{% block title %}write_article{% endblock %}
{% block content %}  
    <form action='' method='post'><table>
        {% csrf_token %}
        {{ form.as_table }}
        <tr>
            <td><input type="submit" value="创建用户" />
            <input type="hidden" name="next" value="{{ next|escape }}" /></td>
        </tr>
    </table></form>
{% endblock %}
 
 
4.页面显示

创建Django项目(七)——表单的更多相关文章

  1. 第二十二章 Django会话与表单验证

    第二十二章 Django会话与表单验证 第一课 模板回顾 1.基本操作 def func(req): return render(req,'index.html',{'val':[1,2,3...]} ...

  2. 创建Django项目的过程

    1.创建Django项目根目录 a.命令式创建法:Django-admin startproject 项目名称 b.pycharm创建法:如下图 2.配置setting环境 a.配置静态文件 STAT ...

  3. 终端指令操作创建Django项目

    需求:通过Django创建一个用户表和权限表. 用户表包括:用户名,邮箱,密码,管理权限. 权限表包括:普通用户,管理用户,超级用户. 权限表和用户表有一对多的关系,即用户表中的每条数据对应权限表中的 ...

  4. 【django之form表单】

    一.构建一个表单 假设你想在你的网站上创建一个简单的表单,以获得用户的名字.你需要类似这样的模板: <form action="/your-name/" method=&qu ...

  5. Django的form表单

    html的form表单 django中,前端如果要提交一些数据到views里面去,需要用到 html里面的form表单. 例如: # form2/urls.py from django.contrib ...

  6. Pycharm创建Django项目并访问Django

    Pycharm创建Django项目并访问Django 一.Django插件 如果没有Django插件,需要先安装Django插件. 1,首先点击Default Settings,打开设置页面: 2,打 ...

  7. Django 11 form表单(状态保持session、form表单及注册实现)

    Django 11 form表单(状态保持session.form表单及注册实现) 一.状态保持 session 状态保持 #1.http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状 ...

  8. 转载:Django之form表单

    转载: 一.使用form类创建一个表单 先定义好一个RegForm类: forms.py from django import forms # 导入forms类 class NameForm(form ...

  9. 创建Django项目(三)——站点管理

    2013-08-05 21:01:34|         1.激活管理界面         (1) 修改"mysite\mysite\settings.py"文件,将'django ...

  10. Django-下载安装-配置-创建django项目-三板斧简单使用

    目录 Django 简介 使用 django 的注意事项 计算机名不能有中文 Django版本问题 django下载安装 在命令行下载安装 在pycharm图形界面下载安装 检验是否安装成功 创建Dj ...

随机推荐

  1. linux下php访问sql server设置

    安装freeIDS 官网下载地址: wget ftp://ftp.freetds.org/pub/freetds/stable/freetds-1.00.18.tar.gz 1.1.到下载目录解压 t ...

  2. hibernate 批量插入数据

    如题,有两种方法 1)使用FLUSH 2)使用JDBC 分别来解释: 1)hibernate在进行数据库操作的时候,都要有事务支持的.可能你曾遇到过,没有加事务,程序会报错的情况. 而事务每次提交的时 ...

  3. url传值的长度限制解决办法

    今天写到两个页面传值,刚开始通过url上加参数进行传值, var strLink = "my.asp?str1=" + str1List + "&str2=&qu ...

  4. 解决重置PostgreSQL 9.6密码的问题

    一.PostgreSql9.6重置密码的方法: 1.打开windows服务管理器,找到“postgresql-x64-9.6”服务,停止服务. 2.找到PostgreSQL9.6的安装目录(以我的E盘 ...

  5. 【译】x86程序员手册40-10.5初始化的例子

    10.5 Initialization Example初始化的例子 译注:本来想把这个例子全部注释完,但由于对intel汇编实不熟悉,有太多的伪指令,本人也是免强看懂,所以就不再做翻译了. $TITL ...

  6. 异常详细信息: System.ComponentModel.Win32Exception: 信号灯超时时间已到

  7. 拒绝访问。 (异常来自 HRESULT:0x80070005 (E_ACCESSDENIED))

    由于我添加了一个一般处理程序,再运行就出现报错. 解决方法是: 运行dcomcnfg   点组件服务->服务->电脑->我的电脑->DCOM 配置   找到“Windows M ...

  8. JS中二进制与十进制的相互转换

    今天在做题目的时候遇到了需要十进制转换为二进制,这个我知道用toString可以,但是二进制转换为十进制我一下子就想不起来,网上搜了下,才知道是parseInt可以实现,特此记录下. 十进制转换为二进 ...

  9. anchor_target_layer层其他部分解读

    inds_inside = np.where( (all_anchors[:, 0] >= -self._allowed_border) & (all_anchors[:, 1] > ...

  10. HDU—4463 Outlets 最小生成树

    In China, foreign brand commodities are often much more expensive than abroad. The main reason is th ...