【问题标题】:redirecting to homepage after user submits a blog post?用户提交博客文章后重定向到主页?
【发布时间】:2022-11-03 01:04:08
【问题描述】:

我对使用 Django 和一般编码非常陌生。所以我已经想出了如何让表单提交到我的数据库,但是现在当它提交时,它只会把你带到空白的 blog_post 视图,我不明白如何正确重定向。

这是views.py:

from django.shortcuts import render, redirect
from .models import post
from django.views import generic, View
from django.views.decorators.http import require_GET
from django.http import HttpResponse, HttpResponseRedirect
from .forms import PostForm

# Views for post list


class postslist(generic.ListView):
    model = post
    queryset = post.objects.filter(status=1).order_by('-created_on')
    template_name = 'home.html'
    paginate_by = 4

# view for individual post


class postdetail(generic.DetailView):
    model = post
    template_name = "post.html"


def blog_post(request):

    form = PostForm(request.POST or None)

    if request.method == "POST":
        if form.is_valid():
            form.instance.user = request.user
            form.save()
        return redirect("blog:success")

    context = {'form': form,
               }

    return render(request, "create_post.html", context)


def success(request):
    return HttpResponseRedirect("home.html")

网址.py:

from . import views
from django.urls import path, include
from .views import *


urlpatterns = [
    # home
    path('', views.postslist.as_view(), name='home'), 
    # add post
    path('blog_post/', views.blog_post, name='blog_post'),
    # success for blog post
    path('success/', views.success, name='success'),
    # posts
    path('<slug:slug>/', views.postdetail.as_view(), name='post_detail'),
]

我已经尝试了一些 httpresponseredirect 和重定向的变体,但我无法理解它,也无法在网上找到它。任何帮助是极大的赞赏。

【问题讨论】:

  • 你想重定向到home.html 页面吗?

标签: python django redirect


【解决方案1】:

视图应该是这样的:


def blog_post(request):

    if request.method == "POST":
       form=PostForm(request.POST)
        if form.is_valid():
            form.instance.user = request.user
            form.save()
        return redirect("blog:home")
    else:
        form = PostForm()

    context = {'form': form,
               }

    return render(request, "create_post.html", context)

还需要在 urls.py 中指定app_name='blog' 所以:

from . import views
from django.urls import path, include
from .views import *

app_name='blog'

urlpatterns = [
    # home
    path('', views.postslist.as_view(), name='home'), 
    # add post
    path('blog_post/', views.blog_post, name='blog_post'),
    # success for blog post
    path('success/', views.success, name='success'),
    # posts
    path('<slug:slug>/', views.postdetail.as_view(), name='post_detail'),
]


【讨论】:

    猜你喜欢
    • 2015-12-16
    • 1970-01-01
    • 2018-02-13
    • 1970-01-01
    • 2023-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多