我正在编写一个新闻网站,在详细的新闻页面中,有一个评论的喷泉,如果人们想要发表评论,他们需要先登录。我想说明,在他们成功登录之后,页面可以返回上一个新闻页面。
这是我的views.py:
process
这是我的news_detail.html:
def newsDetailView(request, news_pk):
news = News.objects.get(id=news_pk)
title = news.title
author = news.author_name
add_time = news.add_time
content = news.content
category = news.category
tags = news.tag.annotate(news_count=Count('news'))
all_comments = NewsComments.objects.filter(news=news)
comment_form = CommentForm(request.POST or None)
if request.method == 'POST' and comment_form.is_valid():
comments = comment_form.cleaned_data.get("comment")
comment = NewsComments(user=request.user, comments=comments, news=news)
comment.save()
return render(request, "news_detail.html", {
'title': title,
'author': author,
'add_time': add_time,
'content': content,
'tags': tags,
'category': category,
'all_comments': all_comments,
'comment_form': comment_form
})
这是我的LoginView:
{% if user.is_authenticated %}
<form method="POST" action="">{% csrf_token %}
<div class="form-group">
<label for="exampleFormControlTextarea1"><h5>评论 <i class="fa fa-comments"></i></h5>
</label>
<textarea id="js-pl-textarea" class="form-control" rows="4"
placeholder="我就想说..." name="comment"></textarea>
<div class="text-center mt-3">
<input type="submit" id='js-pl-submit' class="btn btn-danger comment-submit-button" value="Submit Comemmt">
</input>
</div>
</div>
</form>
{% else %}
<span>Please Login or register first</span>
<a class="btn btn-primary mb-5"
href="{% url 'login' %}?next={{ request.path }}">登录</a>
<a class="btn btn-danger mb-5" href="{% url 'register' %}?next={{ request.path }}">注册</a>
{% endif %}
我有一个login.html和register.html。它们运作良好。
有人知道如何在我的特定情况下制作它吗?非常感谢你!
答案 0 :(得分:1)
首先:
def login(request):
if request.method == 'GET':
request.session['login_from'] = request.META.get('HTTP_REFERER', '/')
第二
if request.method == 'POST':
#TODO:
#Redirect to previous url
return HttpResponseRedirect(request.session['login_from'])
答案 1 :(得分:1)
为了完成,如果您想在 HTML 文档(即任何给定页面)中创建可点击的反向链接,请使用以下选项之一:
1.) 适用于所有浏览器
<input type=button value="Previous Page" onClick="window.history.back();return false;">
2.) javascript - 版本
<input type=button value="Previous Page" onClick="javascript:history.go(-1);">
This answer and associated comment 是我找到两种选择的地方。
请注意,除了使用 <input>
,您还可以使用 <a>
标签,例如像这样(见this thread):
<a href="javascript:history.go(-1)" class="btn btn-default">Previous Page</a>
答案 2 :(得分:0)
return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
将返回调用当前函数的页面。
答案 3 :(得分:0)
您通过next
参数
<span>Please Login or register first</span>
<a class="btn btn-primary mb-5" href="{% url 'login' %}?next={{ request.path }}">登录</a>
<a class="btn btn-danger mb-5" href="{% url 'register' %}?next={{ request.path }}">注册</a>
</span>
所以在你的loginView或RegisterView;
完成所有流程后,检索参数next
,您就可以重定向用户,例如可以在提交表单后。
from django.core.urlresolvers import resolve, Resolver404
from django.http import HttpResponseRedirect
from django.shortcuts import redirect
url = request.GET.get("next")
try:
resolve(url)
return HttpResponseRedirect(url)
except Resolver404: # Make sure the url comes from your project
return redirect("default_view") # A default view