Django学习(八)---修改文章和添加文章
博客页面的修改文章和添加新文章
从主页点击不同文章的超链接进入文章页面,就是传递了一个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学习(八)---修改文章和添加文章的更多相关文章
- Django学习(六)---博客文章页面的超链接设置
Django中的超链接 超链接的目标地址 href后面是目标地址 template中可以用 {% url 'app_name : url_name' param %} app_name:应用命名 ...
- Django学习笔记:为Model添加Action
|- Django版本:1.8 |- Python版本:3.4 models.py 1 class Story(models.Model): #编辑Story状态 STATUS_CHOICES = ( ...
- Django学习笔记-修改Django的默认的数据库
1.修改设置settings中的配置 DATABASES = { 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os ...
- ASP.NET MVC5 网站开发实践(二) Member区域 - 添加文章
上次把架构做好了,这次做添加文章.添加文章涉及附件的上传管理及富文本编辑器的使用,早添加文章时一并实现. 要点: 富文本编辑器采用KindEditor.功能很强大,国人开发,LGPL开源,自己人的好东 ...
- [python][django学习篇][11]后台admin用户登录博客,添加文章---这一章和博客首页设计没有关系
1 如果没有创建超级管理员账号,先要创建python manage.py createsuperuser 2 在admin后台注册模型(如果没有这一步,登录http://127.0.0.1:8000/ ...
- Django学习(七)---添加新文章页面
在template中添加add_article.html页面 (form input)请求方法使用post 这个页面涉及到了两个响应函数 1)显示页面的响应函数 2)表单提交的响应函数 add_a ...
- Django:(博客系统)添加文章(中文)出现UnicodeEncodeError乱码
添加文章时出现了一个UnicodeEncodeError乱码问题 在添加文章时,抛出了异常: 解决方案,修改manage.py(添加import sys reload(sys) sys.setdefa ...
- 可能是最早的学习Android N新特性的文章
可能是最早的学习Android N新特性的文章 Google在今天放出了Android N开发者预览版.Android N支持Nexus6及以上的设备.5太子Nexus5不再得到更新. Android ...
- Halo 开源项目学习(四):发布文章与页面
基本介绍 博客最基本的功能就是让作者能够自由发布自己的文章,分享自己观点,记录学习的过程.Halo 为用户提供了发布文章和展示自定义页面的功能,下面我们分析一下这些功能的实现过程. 管理员发布文章 H ...
随机推荐
- VR全景:720全景在线购物点亮你的眼球
在今天,如果你还不了解什么叫做VR (Virtual Reality),那么你真的就已经Out了.现在的VR,正如当年的智能手机一样,传遍了整个世界,2016年,也被称作VR元年,各种各样的设备,以及 ...
- jQuery插件 -- 图片随页面滚动fixed
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- JavaSE教程-01初识Java-思维导图
图片看不清楚时: 1)可以将图片另存为图片,保存在本地来查看 2)右击在新标签中打开放大查看. 分解: 1.计算机基本概念的普及 硬件 cpu.内存.硬盘等 软件 系统级软件 Windows.Linu ...
- TLS1.0和TLS1.1的区别
TLS1.1是对TSL1.0的改进其中包括: 改进"抗抵赖"安全特性上的缺陷 完成协议对椭圆曲线的支持,提出了改进的支持ECC算法的传输层安全协议, 握手协议引入了数字签名及验证机 ...
- PHP·笔记(函数总结)
PHP 指 PHP:超文本预处理器(译者注:PHP: Hypertext Preprocessor,递归命名) PHP 是一种服务器端的脚本语言,类似 ASP PHP 脚本在服务器上执行 PHP 支持 ...
- 进程控制fork与vfork
1. 进程标识符 在前面进程描述一章节里已经介绍过进程的两个基本标识符pid和ppid,现在将详细介绍进程的其他标识符. 每个进程都有非负的整形表示唯一的进程ID.一个进程终止后,其进程ID就可以再次 ...
- JAVAEE——spring01:介绍、搭建、概念、配置详解、属性注入和应用到项目
一.spring介绍 1.三层架构中spring位置 2.spring一站式框架 正是因为spring框架性质是属于容器性质的. 容器中装什么对象就有什么功能.所以可以一站式. 不仅不排斥其他框架,还 ...
- Ubutnu16.04安装pytorch
1.下载Anaconda3 首先需要去Anaconda官网下载最新版本Anaconda3(https://www.continuum.io/downloads),我下载是是带有python3.6的An ...
- Gist - ES6 Iterator
Introduction Iterator is one of the most common design modes in daily development. Let's explore the ...
- Appcan开发笔记:结合JQuery的$.Deferred()完善批量异步发送
appcan的 uexXmlHttpMgr.send 或者 appcan.ajax无法同步请求(没有找到这个属性),只能异步,造成循环多次提交时由于延迟或网络堵塞等原因无法同步响应,导致提交顺序混乱, ...