Django:reverse反转URL并传递参数
需求:
假设在文章详情页评论文章后需要重新刷新显示该页面(原始方法,提交评论表单为form方式,未采用ajax方式),
提交评论后代码会走comment的视图函数,等数据入库之后需要将页面重新定位到文章详情页面。
article_detail2.html页面
<!-- article_detail2.html --> <!-- 发表评论 -->
<br>
{% if user.is_authenticated %}
<div>
<form
action="{% url 'comment:post_comment' article.id %}"
method="POST"
>
{% csrf_token %}
<div class="form-group">
<label for="body">
<strong>
我也要发言:
</strong>
</label>
<textarea
type="text"
class="form-control"
id="body"
name="body"
rows="2"></textarea>
</div>
<!-- 提交按钮 -->
<button type="submit" class="btn btn-primary ">发送</button>
</form>
</div>
<br>
{% else %}
<br>
<h5 class="row justify-content-center">
请<a href="{% url 'account:user_login' %}">登录</a>后回复
</h5>
<br>
{% endif %}
URL路由
from django.conf.urls import url
from . import views, list_views
from haystack.views import SearchView urlpatterns=[
url(r'^article-column/$', views.article_column, name='article_column'),
url(r'^rename-column/$', views.rename_article_column, name='rename_article_column'),
url(r'^delete-column/$', views.delete_article_column, name='delete_column'),
url(r'^post-article/$', views.article_post, name='article_post'),
url(r'^article-list/$', views.article_list, name='article_list'),
url(r'^delete-article/$', views.delete_article, name='delete_article'),
url(r'^article-detail/(?P<id>\d+)/(?P<slug>[-\w]+)/$', views.article_detail, name='article_detail'),
url(r'^re-edit-article/(?P<article_id>\d+)$', views.re_edit_article, name='re_edit_article'),
url(r'^list-article-titles/$', list_views.article_titles, name='list_article_titles'),
url(r'^list-article-titles-bysomeone/(?P<author>[-\w]+)/$', list_views.article_titles_by_someone, name='list_article_titles_bysomeone'), url(r'^upload/$', views.upload_img, name='upload_img'),
# url(r'^search/$', views.MySeachView, name='haystack_search'),
# SearchView()视图函数,默认使用的HTML模板路径为templates/search/search.html
url(r'search/$', SearchView(), name='haystack_search'),
]
评论视图函数:
from django.http import HttpResponse
from django.shortcuts import render, get_object_or_404, redirect, reverse from article.models import ArticlePost
from comment.forms import CommentForm
from .models import Comment
from utils.decorators import login_wrapper # Create your views here. # @login_wrapper
def post_comment(request, article_id, parent_comment_id=None):
article = get_object_or_404(ArticlePost, id=article_id)
slug = article.slug
print(article_id, parent_comment_id)
# 处理post请求
if request.method == 'POST':
comment_form = CommentForm(request.POST)
if comment_form.is_valid():
new_comment = comment_form.save(commit=False)
new_comment.article = article
new_comment.user = request.user # 二级回复
if parent_comment_id:
print('已请求')
parent_comment = Comment.objects.get(id=parent_comment_id)
# 若回复层级超过两级,则转为二级
new_comment.parent_id = parent_comment.get_root().id
# 被回复人
new_comment.reply_to = parent_comment.user
new_comment.save()
print('评论已写入')
return HttpResponse('200 OK') new_comment.save()
# 评论完成刷新该页面,后面优化为aja提交数据,局部刷新
# return redirect('article:list_article_titles')
# reverse反转url时需要传参数,要用到kwargs参数,会传入一个字典类型的参数
article_detail_url = reverse('article:article_detail', kwargs={'id': article_id, 'slug': slug})
return redirect(article_detail_url)
else:
return HttpResponse("表单有误,重新填写") elif request.method == 'GET':
print('获取评论')
comment_form = CommentForm()
context = {
'comment_form': comment_form,
'article_id': article_id,
'parent_comment_id': parent_comment_id
}
return render(request, 'comment/reply.html', context) else:
return HttpResponse("仅接受get或者post请求")
其中可以看到这两行:
article_detail_url = reverse('article:article_detail', kwargs={'id':article_id,'slug':slug})
return redirect(article_detail_url)
在评论视图中如果采用硬编码方式则为
article_detail_url = 'article/article-detail/%s/%s' % (article_id,slug)
return redirect(article_detail_url)
这样做的坏处就是,如果当文章详情页面的url变化之后,这里也要跟着修改,不符合DRY原则(Don`t Repeat Yourself)
使用reverse函数(意思是逆向、反转)代码中只要写对应url的name就实现了从name到path的转换,那为什么叫反转呢,因为URL配置中实现的是从path到name。
Django:reverse反转URL并传递参数的更多相关文章
- 转:Web页面通过URL地址传递参数常见问题及检测方法
Web页面即我们在浏览器中所看到的网页,在Web应用程序中,其页面往往需要进行动态切换和数据交互,页面间的数据常规传递方法有多种,本文主要介绍Web页面处理程序中常见的URL地址参数传递方法,包括概述 ...
- 关于一些url中传递参数有空格问题
1.关于一些url中传递参数有空格问题: url.replace(/ /g, "%20") 从上面的例子中可以看到可以用:replace(/ /g, "%20" ...
- URL中传递参数给视图函数
1. 采用在url中使用变量的方式: 在path的第一个参数中,使用<参数名>的方式可以传递参数.然后在视图函数中也要写一个参数,视图函数中的参数必须和url中的参数名称保持一致,不然就找 ...
- url 传递参数(特殊字符)解决方法
url 传递参数(特殊字符)解决方法 首先设置 apache 配置文件, server.xml 在 port=8080 那一行中加上 URIEcoding=GBK 有些符号在URL中是不能直接传递的, ...
- Django学习手册 - reverse()反转URL
前端: <h1>测试</h1> <a href="/ce_test/?id=1">1按键</a> <a href=" ...
- 解决JS在url中传递参数时参数包含中文乱码的问题
1.传参页面JavaScript代码: function go_mark(id,jobname,headimgurl,nickname){ window.location.href = "m ...
- url如何传递参数
$(document).ready(function() { var name=getQueryString('minename'); if (name != null && name ...
- 通过注册的URL Scheme向目标APP传递参数
通过注册的URL Scheme向目标APP传递参数 通过URL Scheme启动APP很简单就可以做到,但有时候我们想在启动APP的时候传递一些参数,这个时候我们就可以通过URL Scheme自定义U ...
- 关于Url传递参数
Url传递参数时,后台取值会直接取等号后面的内容,包括引号在内. 比如: http://localhost:8080/user?name='admin' 这是错误的做法,后台获取到的参数是包括引号 ...
随机推荐
- Django rest framework的基本用法
今天在网上看到几篇比较不错的drf基本功能介绍,本来想自己写一篇,后来发现脱不开原作者的思路,遂卒,直接扔链接小伙伴自己去看吧.... 1.django rest framework apiview. ...
- 使用jQuery快速高效制作网页交互特效---jQuery选择器
一.什么是jQuery选择器 Query选择器继承了CSS与Path语言的部分语法,允许通过标签名.属性名或内容对DOM元素进行快速.准确的选择, 而不必担心浏览器的兼容性,通过jQuery选择器对页 ...
- html表格按长度换行
<table style="table-layout:fixed; WORD-BREAK: break-all; WORD-WRAP: break-word; width:200px; ...
- Oracle语句中IN和=的区别有哪些?
Oracle语句中IN和=的区别有: 1.首先应用范围不一样:in 可以理解为是范围内的选择:= 只有一个.例如: select sno, sname from t1 where sno in ('s ...
- leetcode解题报告(15):Third Maximum Number
描述 Given a non-empty array of integers, return the third maximum number in this array. If it does no ...
- 18.4.09 模拟考 zhx P75
题目链接 https://files.cnblogs.com/files/lovewhy/P75.pdf P75 竞赛时间: ????年??月??日??:??-??:?? 注意事项(请务必仔细阅读) ...
- 微信小程序客服系统
微信公众平台 点击 客服 添加 微信文档-接收消息和事件 在页面中使用 第三方客服系统 芝麻小客服 填写对应的 appid && AppSecret 等信息 微信文档-接收消息和事 ...
- 经常用到(创建OS)的命令
1. 将汇编代码编译为二进制模块文件 nasm mbr.asm -o mbr nasm loader.asm -o loader 2. 将wirte.c ...
- 【SPOJ】Longest Common Substring
[SPOJ]Longest Common Substring 求两个字符串的最长公共子串 对一个串建好后缀自动机然后暴力跑一下 废话 讲一下怎么跑吧 从第一个字符开始遍历,遍历不到了再沿着\(pare ...
- (转) hive调优(2)
hive 调优(二)参数调优汇总 在hive调优(一) 中说了一些常见的调优,但是觉得参数涉及不多,补充如下 1.设置合理solt数 mapred.tasktracker.map.tasks.maxi ...