zoukankan      html  css  js  c++  java
  • 122-django不依赖后台,在前端添加文章(提交后跳转到其他页面)

    假设点击add note,进入到新文章添加界面。看以下视图和模板内容:

    from django.shortcuts import render, get_object_or_404
    from .models import MyNote, Comment
    from .forms import NoteForm
    from django.http import HttpResponseRedirect, Http404
    from django.urls import reverse

    def add_note(request): if request.method != 'POST': form = NoteForm() context = {'form': form} return render(request, 'add_one.html', context) else: form = NoteForm(request.POST) if form.is_valid(): new_note = form.save() return HttpResponseRedirect(reverse('notebook:one_note', args=[new_note.pk]))

      

    其中else部分可以先不看!先看如何显示新增页面,即if部分。

    很简单!在forms.py里定义了一个表格内之后,直接代入到views函数即可,然后作为上下文传入到模板里。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        {% extends 'base.html' %}
        <title>KNote-{% block title %}add one!{% endblock %}</title>
    </head>
    <body>
    
    
        {% block content %}
        <div class="left">
            <form action="{% url 'notebook:add_note' %}" method="post">
                {% csrf_token %}
                {{form.as_p}}
                <input type="submit" value="submit" />
            </form>
        </div>
        {% endblock %}
    
    
    </body>
    
    </html>
    

     

    模板中,action表示提交到哪个url里,提交至url同时意味着要执行url所对应的函数,同时表示这一次通过url来执行函数,其方法(method)是post。

    这个模板的写法意味着,一个函数将它渲染出来之后,如果执行某些操作,他还重新返回到这个函数。由于这次指定了method=‘’POST‘’,将执行else部分。4行代码分别表示:

    • 以一个变量form,接收NoteForm传来的内容
    • 验证提交和接收
    • new_note = form.save()这个表达式会先运行右边的内容,将接收到的提交存入数据库,然后从数据库获取,并赋值到左边的new_note
    • 重定向,指向notebook:one_note,把刚才提交的文章显示出来。

    由于指向一篇单独的文章,使用的url是:path('note/<int:pk>', views.one_note, name='one_note'),也就是通过文章的在数据库的主键来寻找的,所以如果提交了一篇新的文章,你要想再把他显示出来,你必须要知道他的主键,这就要求先存库,再取键值。

    尝试直接用form.pk来取值是错误的,因为这时候还没有pk值。

  • 相关阅读:
    [设计模式]暂时不考虑多线程的单例模式
    [设计模式]策略模式
    [设计模式]工厂模式
    [设计模式]观察者模式1(用JDK提供的API)
    使用visual studio 2013 快速搭建phonegap开发环境
    js日期计算及快速获取周、月、季度起止日
    HTTP 错误 500.21
    C# 实现对网站数据的采集和抓取
    js设置控件的隐藏与显示的两种方法
    jQuery操作checkbox选择
  • 原文地址:https://www.cnblogs.com/lzhshn/p/13516826.html
Copyright © 2011-2022 走看看