Django-NoReverseMatch 在 /posts/new/in/group-1/
Django- NoReverseMatch at /posts/new/in/group-1/
在我的论坛之类的网站。我想要一个功能,其中如果用户是组的一部分,则只有用户可以选择组中的 post。现在,我试图在单击“POST”按钮时在 URL 中传递 group slug。但是 URL 与某些 reason.There 不匹配,分别是两个不同的群组应用程序和 posts。
- 这是“group_detail.html”POST 按钮可以在用户加入群组后单击(第 10 行)-
{% extends "groups/group_base.html" %}
{% block content %}
<h1>{{group.name}}</h1>
<h2> Member Count: {{group.members.count}}</h2>
<div class="content">
{% if user in group.members.all %}
<a href="{% url 'groups:leave' slug=group.slug %}" class="btn btn-lg btn-fill btn-warning"><span class="glyphicon glyphicon-remove-circle"></span> Leave</a>
//line 10 <a href="{% url 'posts:create1' slug=group.slug %}" class="btn btn-lg btn-fill btn-warning" ><span class="glyphicon glyphicon-ok-circle"></span>Post</a></li>
{% else %}
<a href="{% url 'groups:join' slug=group.slug %}" class="btn btn-lg btn-fill btn-warning"><span class="glyphicon glyphicon-ok-circle"></span> Join</a>
{% endif %}
</div>
- 这是 Post 应用的 urls.py
from django.conf.urls import url
from django.urls import path
from . import views
app_name='posts'
urlpatterns = [
url(r"^$", views.PostList.as_view(), name="all"),
url(r"new/in/(?P<slug>[-\w]+)/$", views.CreatePost.as_view(), name="create1"),
url(r"by/(?P<username>[-\w]+)/$",views.UserPosts.as_view(),name="for_user"),
url(r"by/(?P<username>[-\w]+)/(?P<pk>\d+)/$",views.PostDetail.as_view(),name="single"),
url(r"delete/(?P<pk>\d+)/$",views.DeletePost.as_view(),name="delete"),
]
- 这是 Post 应用的 views.py
# from django.shortcuts import render
# # Create your views here.
from django.contrib import messages
from django.contrib.auth.mixins import LoginRequiredMixin
from django.urls import reverse_lazy
from django.http import Http404
from django.views import generic
from django.shortcuts import get_object_or_404
from groups.models import Group
from braces.views import SelectRelatedMixin
from . import forms
from . import models
from django.contrib.auth import get_user_model
User = get_user_model()
class CreatePost(LoginRequiredMixin, SelectRelatedMixin, generic.CreateView):
# form_class = forms.PostForm
fields = ('message',)
model = models.Post
def get(self, request, *args, **kwargs):
group = get_object_or_404(Group,slug=self.kwargs.get("slug"))
# try:
# GroupMember.objects.create(user=self.request.user,group=group)
# except IntegrityError:
# messages.warning(self.request,("Warning, already a member of {}".format(group.name)))
# else:
# messages.success(self.request,"You are now a member of the {} group.".format(group.name))
return super().get(request, *args, **kwargs)
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.user = self.request.user
self.object.group=group
self.object.save()
return super().form_valid(form)
- 这是post_form.html即表单模板
{% extends "posts/post_base.html" %}
{% load bootstrap3 %}
{% block content %}
<h4>Create New Post</h4>
//line 7 <form method="POST" action="{% url 'posts:create1' slug=group.slug %}" id="postForm">
{% csrf_token %}
{% bootstrap_form form %}
<input type="submit" value="Post" class="btn btn-primary btn-large">
</form>
{% endblock %}
单击 post 按钮时出现以下错误-
error image
错误来自 post 应用程序的 'post_form.html' 第 7 行,如评论所述。
将其更改为-
<form method="POST" action="{% url 'posts:create1' slug=group.slug %}" id="postForm">
到-
<form method="POST" action="" id="postForm">
我通过在网页上打印它来检查它,即使 url 显示正确的 slug,group.slug 在此表单中变为空,因此在 {{ group.slug } 处没有打印任何内容} 在网页中。
这解决了上面的错误。
我还更改了 post 应用程序的 views.p 以创建 Post 视图以使我的功能正常工作。
在这个过程中,我到处都将“slug”更改为“pk”,以使用其主键引用该组。
所以现在以上所有文件看起来如下(创建 post 功能有效 [erfectl 现在很好)-
- 这是“group_detail.html”POST 按钮可以在用户加入群组后单击(第 10 行)-
{% extends "groups/group_base.html" %}
{% block content %}
<h1>{{group.name}}</h1>
<h2> Member Count: {{group.members.count}}</h2>
<div class="content">
{% if user in group.members.all %}
<a href="{% url 'groups:leave' slug=group.slug %}" class="btn btn-lg btn-fill btn-warning"><span class="glyphicon glyphicon-remove-circle"></span> Leave</a>
//line 10 <a href="{% url 'posts:create1' pk=group.pk %}" class="btn btn-lg btn-fill btn-warning" ><span class="glyphicon glyphicon-ok-circle"></span>Post</a></li>
{% else %}
<a href="{% url 'groups:join' slug=group.slug %}" class="btn btn-lg btn-fill btn-warning"><span class="glyphicon glyphicon-ok-circle"></span> Join</a>
{% endif %}
</div>
- 这是 Post 应用的 urls.py
from django.conf.urls import url
from django.urls import path
from . import views
app_name='posts'
urlpatterns = [
url(r"^$", views.PostList.as_view(), name="all"),
url(r"new/in/(?P<pk>\d+)/$", views.CreatePost.as_view(), name="create1"),
url(r"by/(?P<username>[-\w]+)/$",views.UserPosts.as_view(),name="for_user"),
url(r"by/(?P<username>[-\w]+)/(?P<pk>\d+)/$",views.PostDetail.as_view(),name="single"),
url(r"delete/(?P<pk>\d+)/$",views.DeletePost.as_view(),name="delete"),
]
- 这是 post 应用的 views.py-
from django.contrib import messages
from django.contrib.auth.mixins import LoginRequiredMixin
from django.urls import reverse_lazy
from django.http import Http404
from django.views import generic
from django.shortcuts import get_object_or_404
from groups.models import Group
from braces.views import SelectRelatedMixin
from . import forms
from . import models
from django.contrib.auth import get_user_model
User = get_user_model()
class CreatePost(LoginRequiredMixin, SelectRelatedMixin, generic.CreateView):
fields = ('message',)
model = models.Post
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.user = self.request.user
self.object.group=get_object_or_404(Group,pk=self.kwargs.get('pk'))
self.object.save()
return super().form_valid(form)
- 这是 post 应用的 post_form.html 即表单模板-
{% extends "posts/post_base.html" %}
{% load bootstrap3 %}
{% block content %}
<h4>Create New Post</h4>
//line 7 <form method="POST" action="" id="postForm">
{% csrf_token %}
{% bootstrap_form form %}
<input type="submit" value="Post" class="btn btn-primary btn-large">
</form>
{% endblock %}
在我的论坛之类的网站。我想要一个功能,其中如果用户是组的一部分,则只有用户可以选择组中的 post。现在,我试图在单击“POST”按钮时在 URL 中传递 group slug。但是 URL 与某些 reason.There 不匹配,分别是两个不同的群组应用程序和 posts。
- 这是“group_detail.html”POST 按钮可以在用户加入群组后单击(第 10 行)-
{% extends "groups/group_base.html" %}
{% block content %}
<h1>{{group.name}}</h1>
<h2> Member Count: {{group.members.count}}</h2>
<div class="content">
{% if user in group.members.all %}
<a href="{% url 'groups:leave' slug=group.slug %}" class="btn btn-lg btn-fill btn-warning"><span class="glyphicon glyphicon-remove-circle"></span> Leave</a>
//line 10 <a href="{% url 'posts:create1' slug=group.slug %}" class="btn btn-lg btn-fill btn-warning" ><span class="glyphicon glyphicon-ok-circle"></span>Post</a></li>
{% else %}
<a href="{% url 'groups:join' slug=group.slug %}" class="btn btn-lg btn-fill btn-warning"><span class="glyphicon glyphicon-ok-circle"></span> Join</a>
{% endif %}
</div>
- 这是 Post 应用的 urls.py
from django.conf.urls import url
from django.urls import path
from . import views
app_name='posts'
urlpatterns = [
url(r"^$", views.PostList.as_view(), name="all"),
url(r"new/in/(?P<slug>[-\w]+)/$", views.CreatePost.as_view(), name="create1"),
url(r"by/(?P<username>[-\w]+)/$",views.UserPosts.as_view(),name="for_user"),
url(r"by/(?P<username>[-\w]+)/(?P<pk>\d+)/$",views.PostDetail.as_view(),name="single"),
url(r"delete/(?P<pk>\d+)/$",views.DeletePost.as_view(),name="delete"),
]
- 这是 Post 应用的 views.py
# from django.shortcuts import render
# # Create your views here.
from django.contrib import messages
from django.contrib.auth.mixins import LoginRequiredMixin
from django.urls import reverse_lazy
from django.http import Http404
from django.views import generic
from django.shortcuts import get_object_or_404
from groups.models import Group
from braces.views import SelectRelatedMixin
from . import forms
from . import models
from django.contrib.auth import get_user_model
User = get_user_model()
class CreatePost(LoginRequiredMixin, SelectRelatedMixin, generic.CreateView):
# form_class = forms.PostForm
fields = ('message',)
model = models.Post
def get(self, request, *args, **kwargs):
group = get_object_or_404(Group,slug=self.kwargs.get("slug"))
# try:
# GroupMember.objects.create(user=self.request.user,group=group)
# except IntegrityError:
# messages.warning(self.request,("Warning, already a member of {}".format(group.name)))
# else:
# messages.success(self.request,"You are now a member of the {} group.".format(group.name))
return super().get(request, *args, **kwargs)
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.user = self.request.user
self.object.group=group
self.object.save()
return super().form_valid(form)
- 这是post_form.html即表单模板
{% extends "posts/post_base.html" %}
{% load bootstrap3 %}
{% block content %}
<h4>Create New Post</h4>
//line 7 <form method="POST" action="{% url 'posts:create1' slug=group.slug %}" id="postForm">
{% csrf_token %}
{% bootstrap_form form %}
<input type="submit" value="Post" class="btn btn-primary btn-large">
</form>
{% endblock %}
单击 post 按钮时出现以下错误- error image
错误来自 post 应用程序的 'post_form.html' 第 7 行,如评论所述。
将其更改为-
<form method="POST" action="{% url 'posts:create1' slug=group.slug %}" id="postForm">
到-
<form method="POST" action="" id="postForm">
我通过在网页上打印它来检查它,即使 url 显示正确的 slug,group.slug 在此表单中变为空,因此在 {{ group.slug } 处没有打印任何内容} 在网页中。
这解决了上面的错误。
我还更改了 post 应用程序的 views.p 以创建 Post 视图以使我的功能正常工作。 在这个过程中,我到处都将“slug”更改为“pk”,以使用其主键引用该组。
所以现在以上所有文件看起来如下(创建 post 功能有效 [erfectl 现在很好)-
- 这是“group_detail.html”POST 按钮可以在用户加入群组后单击(第 10 行)-
{% extends "groups/group_base.html" %}
{% block content %}
<h1>{{group.name}}</h1>
<h2> Member Count: {{group.members.count}}</h2>
<div class="content">
{% if user in group.members.all %}
<a href="{% url 'groups:leave' slug=group.slug %}" class="btn btn-lg btn-fill btn-warning"><span class="glyphicon glyphicon-remove-circle"></span> Leave</a>
//line 10 <a href="{% url 'posts:create1' pk=group.pk %}" class="btn btn-lg btn-fill btn-warning" ><span class="glyphicon glyphicon-ok-circle"></span>Post</a></li>
{% else %}
<a href="{% url 'groups:join' slug=group.slug %}" class="btn btn-lg btn-fill btn-warning"><span class="glyphicon glyphicon-ok-circle"></span> Join</a>
{% endif %}
</div>
- 这是 Post 应用的 urls.py
from django.conf.urls import url
from django.urls import path
from . import views
app_name='posts'
urlpatterns = [
url(r"^$", views.PostList.as_view(), name="all"),
url(r"new/in/(?P<pk>\d+)/$", views.CreatePost.as_view(), name="create1"),
url(r"by/(?P<username>[-\w]+)/$",views.UserPosts.as_view(),name="for_user"),
url(r"by/(?P<username>[-\w]+)/(?P<pk>\d+)/$",views.PostDetail.as_view(),name="single"),
url(r"delete/(?P<pk>\d+)/$",views.DeletePost.as_view(),name="delete"),
]
- 这是 post 应用的 views.py-
from django.contrib import messages
from django.contrib.auth.mixins import LoginRequiredMixin
from django.urls import reverse_lazy
from django.http import Http404
from django.views import generic
from django.shortcuts import get_object_or_404
from groups.models import Group
from braces.views import SelectRelatedMixin
from . import forms
from . import models
from django.contrib.auth import get_user_model
User = get_user_model()
class CreatePost(LoginRequiredMixin, SelectRelatedMixin, generic.CreateView):
fields = ('message',)
model = models.Post
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.user = self.request.user
self.object.group=get_object_or_404(Group,pk=self.kwargs.get('pk'))
self.object.save()
return super().form_valid(form)
- 这是 post 应用的 post_form.html 即表单模板-
{% extends "posts/post_base.html" %}
{% load bootstrap3 %}
{% block content %}
<h4>Create New Post</h4>
//line 7 <form method="POST" action="" id="postForm">
{% csrf_token %}
{% bootstrap_form form %}
<input type="submit" value="Post" class="btn btn-primary btn-large">
</form>
{% endblock %}