博客页面的修改文章和添加新文章

从主页点击不同文章的超链接进入文章页面,就是传递了一个id作为参数,然后后台代码根据这个参数从数据库中取出来对应的文章,并把它传递到前端页面

修改文章和添加新文章,是要进入编辑页面,但编辑页面一个有内容,一个内容为空

根据上述思路,通过id 来区分不同的编辑页面(添加新文章的编辑页面id设为0即可)

传id到后台的两种方法:1)通过url传递文章id ,添加响应函数的参数  2)把id放在隐藏标签的value里面

1)利用方法1来修改add_page响应函数

view.py中add_article.html页面的显示页面响应函数中添加article_id参数

如果参数为0,直接返回添加新文章表单页面

如果不为0,获取数据库中主键为article_id的数据对象,传入前端

def add_article(request,article_id):
    if article_id == 0:
        return render(request,'blog/add_article.html')
    else:
        article = models.Article.objects.get(pk=article_id)
        return render(request,'blog/add_article.html',{'article':article})

urls.py中对应url加上article_id和name:

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^index/$',views.index),
    url(r'^article/(?P<article_id>[0-9]+)/$',views.page,name='page'),
    url(r'^addarticle/(?P<article_id>[0-9]+)/$',views.add_article,name='add_article'),
    url(r'^subarticle/$',views.sub_article,name='sub_article'),

]

文章页面page.html 添加修改文章的url:

<!DOCTYPE html>
<html>
<head>
    <title>my page</title>
</head>
<body>
<h1>{{ article.title }}</h1>
<br/>
<h3>{{ article.content }}</h3>
<br/><br/>
<a href="{% url 'blog:edit_article' article.id %}">修改文章</a>
</body>
</html>

主页面index.html 添加新文章url中加 0

<h3><a href="{% url 'blog:add_article' 0 %}">添加新文章</a></h3>

文章编辑页面add_article.html页面:

如果有后台传入article对象,表单中加入value

{% if *** %}

{% else %}

{% endif %}

<!DOCTYPE html>
<html>
<head>
    <title>增加新文章</title>
</head>
<body>
<form action="{% url 'blog:sub_article' %}" method="post">
    {% csrf_token %}
    {% if article %}
        文章标题<input type="text" name='title' value='{{ article.title }}'/>
        <br>
        文章内容<input type="text" name='content' value='{{ article.content }}'/>
        <br>
    {% else %}
        文章标题<input type="text" name='title' />
        <br>
        文章内容<input type="text" name='content'/>
        <br>
        <input type="submit" value="提交">
    {% endif %}
</form>
</body>
</html>

2) 利用方法2来修改edit_action响应函数

文章编辑页面add_article.html页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>edit article</title>
</head>
<body>
<form action="{% url 'blog:edit_action' %}" method="post">
    {% csrf_token %}
    {% if article %}
    <input type="hidden" name="article_id" value="{{ article.id }}">
    <label>文章标题
        <input type="text" name="title" value="{{ article.title }}"/>
    </label>
    <p></p>
    <label>文章内容
        <input type="text" name="content" value="{{ article.content }}"/>
    </label>
    {% else %}
    <input type="hidden" name="article_id" value="0">
    <label>文章标题
        <input type="text" name="title"/>
    </label>
    <p></p>
    <label>文章内容
        <input type="text" name="content"/>
    </label>
    {% endif %}
    <p></p>
    <input type="submit" value="提交">
</form>
</body>
</html>  

修改views.py:

后台获取article_id

如果为0,数据库创建新的对象

否则,取出数据库中对应对象,修改对象

修改对象:article.title = title    article.save()

def sub_article(request):
    title = request.POST.get('title','TITLE')
    content = request.POST.get('content','CONTENT')
    article_id = request.POST.get(')
    ':
        models.Article.objects.create(title=title, content=content)
        articles = models.Article.objects.all()
        return render(request, 'blog/index.html', {'articles': articles})
    articles = models.Article.objects.get(pk=article_id)
    articles.title = title
    articles.content = content
    articles.save()
    return  render(request, 'blog/page.html', {'article': articles})  

Django学习(八)---修改文章和添加文章的更多相关文章

  1. Django学习(六)---博客文章页面的超链接设置

    Django中的超链接 超链接的目标地址 href后面是目标地址 template中可以用 {% url  'app_name : url_name'   param %} app_name:应用命名 ...

  2. Django学习笔记:为Model添加Action

    |- Django版本:1.8 |- Python版本:3.4 models.py 1 class Story(models.Model): #编辑Story状态 STATUS_CHOICES = ( ...

  3. Django学习笔记-修改Django的默认的数据库

    1.修改设置settings中的配置 DATABASES = { 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os ...

  4. ASP.NET MVC5 网站开发实践(二) Member区域 - 添加文章

    上次把架构做好了,这次做添加文章.添加文章涉及附件的上传管理及富文本编辑器的使用,早添加文章时一并实现. 要点: 富文本编辑器采用KindEditor.功能很强大,国人开发,LGPL开源,自己人的好东 ...

  5. [python][django学习篇][11]后台admin用户登录博客,添加文章---这一章和博客首页设计没有关系

    1 如果没有创建超级管理员账号,先要创建python manage.py createsuperuser 2 在admin后台注册模型(如果没有这一步,登录http://127.0.0.1:8000/ ...

  6. Django学习(七)---添加新文章页面

    在template中添加add_article.html页面 (form  input)请求方法使用post 这个页面涉及到了两个响应函数 1)显示页面的响应函数  2)表单提交的响应函数 add_a ...

  7. Django:(博客系统)添加文章(中文)出现UnicodeEncodeError乱码

    添加文章时出现了一个UnicodeEncodeError乱码问题 在添加文章时,抛出了异常: 解决方案,修改manage.py(添加import sys reload(sys) sys.setdefa ...

  8. 可能是最早的学习Android N新特性的文章

    可能是最早的学习Android N新特性的文章 Google在今天放出了Android N开发者预览版.Android N支持Nexus6及以上的设备.5太子Nexus5不再得到更新. Android ...

  9. Halo 开源项目学习(四):发布文章与页面

    基本介绍 博客最基本的功能就是让作者能够自由发布自己的文章,分享自己观点,记录学习的过程.Halo 为用户提供了发布文章和展示自定义页面的功能,下面我们分析一下这些功能的实现过程. 管理员发布文章 H ...

随机推荐

  1. spring mvc 存取值

    (转) 1,使用HttpServletRequest获取 @RequestMapping("/login.do") public String login(HttpServletR ...

  2. 原生js实现图片网格式渐显、渐隐效果

    写正文前先吐槽一下:端午放假完第一天去某千人以上公司面试前端工程师,第一轮是我应聘职位的部门小领导,谈的不错,面试主要围绕要用到的技术来:第二轮来了我要说的正主,我了个去,问的问题一个和前端无关,问我 ...

  3. JavaSE教程-03Java中分支语句与四种进制转换-练习

    练习1: 老师如果带100或以上则请客吃饭 import java.util.Scanner; public class Test2{ public static void main(String[] ...

  4. SpringBoot学习helloworld

    这几天开始学习springBoot记录一下(Hello World) pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0 ...

  5. Coursera 机器学习笔记(六)

    主要为第八周内容:聚类(Clustering).降维 聚类是非监督学习中的重要的一类算法.相比之前监督学习中的有标签数据,非监督学习中的是无标签数据.非监督学习的任务是对这些无标签数据根据特征找到内在 ...

  6. 软件测试基础(软件测试分类和工具组)firebug、firepath的安装

    白盒测试:需要了解内部结构和代码 黑盒测试:不关心内部结构和代码 灰盒测试:介于白盒黑盒之间 静态测试:测试时不执行被测试软件 动态测试:测试时执行被测试软件 单元测试:测试软件的单元模块 集成测试: ...

  7. 依赖注入之Autofac使用总结

    依赖倒置?控制反转(IOC)? 依赖注入(DI)? 你是否还在被这些名词所困扰,是否看了大量理论文章后还是一知半解了? 今天我想结合实际项目,和正在迷惑中的新手朋友一起来学习和总结依赖注入Autofa ...

  8. elememtui(有关权限的那些事)

    前言:关于权限路由的那些事儿…… 业务情景描述:现有一个后台管理系统,共存在三种类型的人员,①超级管理员(称作1):②组别管理员(2):③普通用户(3):每种类型的人看到的操作栏并不一样,可以进行的操 ...

  9. Spring学习资料以及配置环境

    一.Spring4 1.介绍 新特性 SpringIDE 插件 IOC DI 在 Spring 中配置 Bean 自动装配 Bean 之间的关系(依赖.继承) Bean 的作用域 使用外部属性文件 S ...

  10. maven 的docker插件

    首先你得配置一个带有认证的docker私有仓库. 本机要安装maven和jdk vi pom.xml <plugin> <groupId>com.spotify</gro ...