Django重定向最新帖子的URL视图



我是Django的新手,如果这看起来很琐碎,请原谅。

我正在为一本在线杂志创建最新一期的链接。这是我的代码:

home.html:

{%extends 'base.html'%}
{%load static%}
{% block content%}       
<button href="#"> Latest Issue</button>
{%endblock%}

views.py:

from django.shortcuts import render, get_object_or_404
from django.views.generic import ListView, DetailView, CreateView, UpdateView, DeleteView
from .models import Post, Issue
from .forms import PostForm, EditForm, IssueForm, IssueEditForm
from django.urls import reverse_lazy
from django.http import HttpResponse
class HomeView(ListView):
model = Issue
template_name = "home.html"
class IssueView(ListView):
model = Issue
template_name='issues.html'
class IssueDetailView(DetailView):
model = Issue
template_name = 'issue_details.html'

def get_context_data(self, **kwargs):
context = super(IssueDetailView,self).get_context_data(**kwargs)
context['posts'] = Post.objects.all()
return context
#This is to pass in my post model, so I can display the posts for each issue in issue-details.html.

urls.py:

from django.urls import path
from .models import Post, Issue
#from . import views
from .views import HomeView, ArticleDetailView, AddPostView,EditPostView, DeletePostView,about_view, submit_view,IssueView, AddIssueView, IssueDetailView, EditIssueView
urlpatterns = [
path('',HomeView.as_view(),name="home"),
path('issue/',IssueView.as_view(), name="issue"), path('issue/<int:pk>', IssueDetailView.as_view(), name='issue-detail'),   
]
#Irrelevant urlpatterns omitted.

我看过这个解决方案,但没能实现,尤其是因为它是9年前的。我不知道为重定向url放置/创建什么视图";最新一期;这就是我认为我的问题所在。这是我的尝试:

\home.html
<button href="{% url 'latest-issue'%}"> Latest Issue</button>
\ urls.py
urlpatterns = [
path('',HomeView.as_view(),name="home"),
path('issue/',IssueView.as_view(), name="issue"), 
path('issue/<int:pk>', IssueDetailView.as_view(), name='issue-detail'), 
path('latest-issue/', latest-issue.redirector, name='latest-issue')
]

def redirector(request):
issue = Issue.objects.latest('id')
return http.HttpResponseRedirect(reverse('issue-detail', args=[issue.pk]))

我应该为重定向url放置什么视图,以便它仍然调用重定向函数?

感谢Omri Shaffer帮助我认识到如何以不同的方式处理这一问题。我在urls.py文件中创建了一个url,它将调出一个基于函数的视图get_latest_issue:

from .views import get_latest_issue
path('latest-issue/', get_latest_issue, name='latest-issue')

然后我定义了";重定向器";views.py中的函数,确保导入正确的函数:

from django.shortcuts import HttpResponseRedirect
from django.urls import reverse
def get_latest_issue(request): 
issue = Issue.objects.latest('id')
return HttpResponseRedirect(reverse('issue-detail', args=[issue.pk]))

然后,我更改了home.html中的按钮,使其成为一个链接,这是我第一次尝试时错误的做法:

<button onclick="location.href='{% url 'latest-issue' %}'"> Latest Issue</button>

我也可以将文本作为一个链接,并使用Bootstrap的btn类将其设置为按钮样式。

如果我理解你的问题,你需要一个链接到你的模型中的所有最新问题?覆盖issueview中的默认查询集queryset=modelname.objects.order_by('-created time'(在您的模型中,您应该将DateTimeField设置为auto now add=true

最新更新