Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何解决Django中没有反向匹配的问题_Python_Django - Fatal编程技术网

Python 如何解决Django中没有反向匹配的问题

Python 如何解决Django中没有反向匹配的问题,python,django,Python,Django,我有这个错误,当我试图发布一个新的职位,它没有给我之前的错误,直到我添加了文件上传功能,以创建职位页面,现在当我试图创建后上传文件在获取这个错误 NoReverseMatch at/post/new/ 未找到“发布详细信息”的反向项“发布详细信息”不是有效的视图函数或模式名称。 下面是我的views.py代码 from django.contrib import messages from django.contrib.auth.mixins import (LoginRequiredMixin

我有这个错误,当我试图发布一个新的职位,它没有给我之前的错误,直到我添加了文件上传功能,以创建职位页面,现在当我试图创建后上传文件在获取这个错误

NoReverseMatch at/post/new/ 未找到“发布详细信息”的反向项“发布详细信息”不是有效的视图函数或模式名称。

下面是我的views.py代码

from django.contrib import messages
from django.contrib.auth.mixins import (LoginRequiredMixin, UserPassesTestMixin)
from django.contrib.auth.models import User
from django.urls import reverse_lazy, reverse
from django.http import HttpResponseRedirect, Http404
from django.shortcuts import render, get_object_or_404
from django.views.generic import (ListView, DetailView, CreateView,
                                  UpdateView, DeleteView)

from .models import Post, Comment
from django.core.files.storage import FileSystemStorage
from .forms import CommentForm
from . import models



def home(request):
    context = {
        'posts': Post.objects.all()
    }
    return render(request, 'blog/home.html', context)

def upload(request):
    if request.method == 'POST':
        uploaded_file = request.FILES['document']
        fs = FileSystemStorage()
        fs.save(uploaded_file.name, uploaded_file)
    return render(request, 'blog/post_form.html')


class PostListView(ListView):
    model = Post
    template_name = 'blog/home.html'
    context_object_name = 'posts'
    ordering = ['-date_posted']
    paginate_by = 6

class UserPostListView(ListView):
    model = Post
    template_name = 'blog/user_posts.html'
    context_object_name = 'posts'
    paginate_by = 6

    def get_queryset(self):
        user = get_object_or_404(User, username=self.kwargs.get('username'))
        return Post.objects.filter(author=user).order_by('-date_posted')


class PostDetailView(DetailView):
    model = Post


def post_comment(request, id, slug):
    post = get_object_or_404(Post, id=id, slug=slug)
    comments = Comment.objects.filter(post=post).order_by('-id')

    if request.method == 'POST':
        comment_form = CommentForm(request.POST or None)
        if comment_form.is_valid():
            content = request.POST.get('content')
            comment = Comment.objects.create(post=post, user=request.user, content=content)
            comment.save()
            return HttpResponseRedirect(post.get_absolute_url())

    else:
        comment_form = CommentForm()

    context = {'comments': comments,
               'comment_form': comment_form}
    return render(request, 'blog/post_comment.html', context)


class PostCreateView(LoginRequiredMixin, CreateView):
    model = models.Post
    fields = ['title', 'content', 'group', 'file']

    def form_valid(self, form):
        form.instance.author = self.request.user
        return super().form_valid(form)


class PostUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
    model = Post
    fields = ['title', 'content']

    def form_valid(self, form):
        form.instance.author = self.request.user
        return super().form_valid(form)

    def test_func(self):
        post = self.get_object()
        if self.request.user == post.author:
            return True
        return False

class PostDeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView):
    model = Post
    success_url = reverse_lazy('posts:blog-home')

    def test_func(self):
        post = self.get_object()
        if self.request.user == post.author:
            return True
        return False


def about(request):
    return render(request, 'blog/about.html', {'title': 'About'})
这是我的应用程序URL.py代码

from django.urls import path
from .views import (PostListView, PostCreateView,
                    PostUpdateView, PostDetailView, PostDeleteView, UserPostListView)
from . import views

app_name = 'posts'

urlpatterns = [
    path('', PostListView.as_view(), name="blog-home"),
    path('user/<str:username>', UserPostListView.as_view(), name="user-posts"),
    path('post/<int:pk>/', PostDetailView.as_view(), name="post-detail"),
    path("post/<int:pk>/", views.post_comment, name="comments"),
    path('post/new/', PostCreateView.as_view(), name="post-create"),
    path('post/<int:pk>/update', PostUpdateView.as_view(), name="post-update"),
    path('post/<int:pk>/delete', PostDeleteView.as_view(), name="post-delete"),
    path('about/', views.about, name="blog-about"),

]
从django.url导入路径
从.views导入(PostListView、PostCreateView、,
PostUpdateView、PostDetailView、PostDeleteView、UserPostListView)
从…起导入视图
应用程序名称='posts'
URL模式=[
路径(“”,PostListView.as_view(),name=“blog home”),
路径('user/',UserPostListView.as_view(),name=“user posts”),
路径('post/',PostDetailView.as_view(),name=“post detail”),
路径(“post/”,views.post_comment,name=“comments”),
路径('post/new/',PostCreateView.as_view(),name=“post create”),
路径('post//update',PostUpdateView.as_view(),name=“post update”),
路径('post//delete',PostDeleteView.as_view(),name=“post delete”),
路径('about/',views.about,name=“blog about”),
]
这是我的项目URL.py代码

from django.contrib import admin
from django.contrib.auth import views as auth_views
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
from users import views as user_view

urlpatterns = [
    path('admin/', admin.site.urls),
    path('register/', user_view.register, name="register"),
    path('profile/', user_view.profile, name="profile"),
    path('groups/',include("groups.urls", namespace="groups")),
    path('login/', auth_views.LoginView.as_view(template_name='users/login.html'), name="login"),
    path('logout/', auth_views.LogoutView.as_view(template_name='users/logout.html'), name="logout"),
    path('password-reset/', auth_views.PasswordResetView.as_view(template_name='users/password_reset.html'), name="password_reset"),
    path('password-reset/done/', auth_views.PasswordResetDoneView.as_view(template_name='users/password_reset_done.html'), name="password_reset_done"),
    path('password-reset-confirm/<uidb64>/<token>/', auth_views.PasswordResetConfirmView.as_view(template_name='users/password_reset_confirm.html'), name="password_reset_confirm"),
    path('password-reset-complete/', auth_views.PasswordResetCompleteView.as_view(template_name='users/password_reset_complete.html'), name="password_reset_complete"),
    path('', include("blog.urls")),
]

if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
来自django.contrib导入管理
从django.contrib.auth导入视图作为auth_视图
从django.url导入路径,包括
从django.conf导入设置
从django.conf.url.static导入静态
从用户导入视图作为用户视图
URL模式=[
路径('admin/',admin.site.url),
路径('register/',user_view.register,name=“register”),
路径('profile/',user_view.profile,name=“profile”),
路径('groups/',include('groups.url',namespace=“groups”),
路径('login/',auth_views.LoginView.as_view(template_name='users/login.html'),name=“login”),
path('logout/',auth_views.LogoutView.as_view(template_name='users/logout.html'),name=“logout”),
路径('password-reset/',auth_views.PasswordResetView.as_view(template_name='users/password_reset.html'),name=“password_reset”),
路径('password-reset/done/',auth_views.PasswordResetDoneView.as_view(template\u name='users/password\u reset\u done.html'),name=“password\u reset\u done”),
路径('password-reset-confirm//',auth_views.PasswordResetConfirmView.as_view(template\u name='users/password\u reset\u confirm.html'),name=“password\u reset\u confirm”),
路径('password-reset-complete/',auth_views.PasswordResetCompleteView.as_view(template\u name='users/password\u reset\u complete.html'),name=“password\u reset\u complete”),
路径(“”,包括(“blog.url”),
]
如果设置为.DEBUG:
urlpatterns+=静态(settings.static\u URL,document\u root=settings.static\u root)
urlpatterns+=静态(settings.MEDIA\u URL,document\u root=settings.MEDIA\u root)
这是我的模板post_detail.html代码

{% extends "blog/base.html" %}
{% block content %}

        <article class="media content-section">
              <img class="rounded-circle article-img" src="{{ object.author.profile.image.url }}">
              <div class="media-body">
                <div class="article-metadata">
                  <a class="mr-2" href="{% url 'posts:user-posts' object.author.username %}">{{ object.author }}</a>
                  <small class="text-muted">{{ object.date_posted|date:"F d, Y" }}</small>
                    {% if object.author == user %}
                        <div>
                            <a class="btn btn-secondary btn-sm mt-1 mb-1" href="{% url 'posts:post-update' object.id %}">Update</a>
                            <a class="btn btn-danger btn-sm mt-1 mb-1" href="{% url 'posts:post-delete' object.id %}">Delete</a>
                        </div>
                    {% endif %}
                </div>
                <h2 class="article-title">{{ object.title }}</h2>
                <p class="article-content">{{ object.content }}</p>
              </div>
        </article>

{% endblock %}
{%extends“blog/base.html”%}
{%block content%}
{{object.date{u posted}日期:“fd,Y”}
{%if object.author==user%}
{%endif%}
{{object.title}}

{{{object.content}

{%endblock%}
该应用程序的工作方式是,当你发布的帖子出现在由用户_posts.html控制的主页上时,代码如下

{% extends "blog/base.html" %}
{% block content %}
    <h2 class="mb-3">Posts by {{ views.kwargs.username }} ({{ page_obj.paginator.count }})</h2>
    {% for post in posts %}
        <article class="media content-section">
              <img class="rounded-circle article-img" src="{{ post.author.profile.image.url }}">
              <div class="media-body">
                <div class="article-metadata">
                  <a class="mr-2" href="{% url 'posts:user-posts' post.author.username %}">{{ post.author }}</a>
                  <small class="text-muted">{{ post.date_posted|date:"F d, Y" }}</small>
                </div>
                <h2><a class="article-title" href="{% url 'posts:post-detail' post.id %}">{{ post.title }}</a></h2>
                <p class="article-content">{{ post.content }}</p>
              </div>
        </article>
    {% endfor %}
    {% if is_paginated %}

        {% if page_obj.has_previous %}
            <a class="btn btn-outline-info mb-4" href="?page=1">First</a>
            <a class="btn btn-outline-info mb-4" href="?page={{ page_obj.previous_page_number }}">Previous</a>
        {% endif %}

        {% for num in page_obj.paginator.page_range %}
            {% if page_obj.number == num %}
                <a class="btn btn-info mb-4" href="?page={{ num }}">{{ num }}</a>
            {% elif num > page_obj.number|add:'-3' and num < page_obj.number|add:'3' %}
                <a class="btn btn-outline-info mb-4" href="?page={{ num }}">{{ num }}</a>
            {% endif %}
        {% endfor %}

        {% if page_obj.has_next %}
            <a class="btn btn-outline-info mb-4" href="?page={{ page_obj.next_page_number }}">Next</a>
            <a class="btn btn-outline-info mb-4" href="?page={{ page_obj.paginator.num_pages }}">Last</a>
        {% endif %}

    {% endif %}
{% endblock %}
{%extends“blog/base.html”%}
{%block content%}
按{views.kwargs.username}}({{page_obj.paginator.count}})发布的帖子
{posts%%中的post为%s}
{{发布日期{发布日期:“F d,Y”}

{{post.content}

{%endfor%} {%if已分页%} {%如果页面_obj.has_previous%} {%endif%} {page_obj.paginator.page_range%} {%if page_obj.number==num%} {%elif num>page_obj.number | add:'-3'和num
这是回溯期间显示为粗体的错误

C:\Users\HOPE\Desktop\Django\Blog\u project\Blog\views.py格式为\u valid 返回super().form\u有效(form)

获取绝对url中的C:\Users\HOPE\Desktop\Django\Blog\u project\Blog\models.py
返回反向('post-detail',kwargs={'pk':self.pk})问题出在这一行的“user_posts.html”中

    <h2><a class="article-title" href="{% url 'posts:post-detail' post.id %}">{{ post.title }}</a></h2>

这一行应该包括:

    <h2><a class="article-title" href="{% url 'posts:post-detail' pk=post.id %}">{{ post.title }}</a></h2>

如果我们看一下你的“url.py”-

    path('post/<int:pk>/', PostDetailView.as_view(), name="post-detail"),
路径('post/',PostDetailView.as_view(),name=“post detail”),
我们看到您访问此url的方式是使用整数pk。
因此,在html文件中,当尝试反转到此url时,请确保指定pk=post.id。这样,django就知道要将哪些信息传递到url。

请只发布相关代码