【问题标题】:Getting NoReverseMatch___ Reverse for 'for_user' with keyword arguments '{'username': ''}' not found. 1 pattern(s) tried: ['/(?P<username>[-\\w]+)/$']使用关键字参数 '{'username': ''}' 为 'for_user' 获取 NoReverseMatch___ 反转。尝试了 1 种模式:['/(?P<用户名>[-\\w]+)/$']
【发布时间】:2022-01-25 19:42:39
【问题描述】:

我曾尝试查看类似的问题,但似乎无法解决此错误。

/groups/ 处的 NoReverseMatch
使用关键字参数'{'username': ''}' 反向查找'for_user'。尝试了 1 种模式:['posts/by/(?P[-\w]+)/$']

models.py

from groups.models import Group
# Create your models here.

from django.contrib.auth import get_user_model
User = get_user_model()
class Post(models.Model):
user = models.ForeignKey(User,related_name='posts',
on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now=True)
message = models.TextField()
message_html = models.TextField(editable='False')
group = models.ForeignKey(Group,related_name='posts',
null=True,blank=True,on_delete=models.CASCADE)

def __str__(self):
    return self.message

def save(self,*args,**kwargs):
    self.message_html = misaka.html(self.message)
    super().save(*args,**kwargs)

def get_absolute_url(self):
    return reverse(
    'posts:single',
    kwargs={'username':self.user.username,
    'pk':self.pk})

class Meta:
    ordering = ['-created_at']
    unique_together = ['user','message']

Views.py

class PostList(SelectRelatedMixin,generic.ListView):
 model = models.Post
 select_related = ('user','group')

class UserPosts(generic.ListView):
 model = models.Post
 template_name = "posts/user_post_list.html"

def get_queryset(self):
    try:
        self.post_user = User.objects.prefetch_related("posts").get(
            username__iexact=self.kwargs.get("username")
        )
    except User.DoesNotExist:
        raise Http404
    else:
        return self.post_user.posts.all()

def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    context["post_user"] = self.post_user
    return context
    
class PostDetail(SelectRelatedMixin,generic.DetailView):
 model = models.Post
 select_related = ('user','group')

   def get_queryset(self):
     queryset = super().get_queryset()
     return queryset.filter(user__username__iexact=self.kwargs.get('username'))

class CreatePost(LoginRequiredMixin,SelectRelatedMixin,generic.CreateView):

 fields = ('message','group')
 model = models.Post

def form_valid(self,form):
    self.object = form.save(commit=False)
    self.object.user = self.request.user
    self.object.save()
    return super().form_valid(form)

class DeletePost(LoginRequiredMixin,SelectRelatedMixin,generic.DeleteView):
 model = models.Post
 select_related = ('user','group')
 success_url = reverse_lazy('posts:all')

    def get_queryset(self):
       queryset = super().get_queryset()
       return queryset.filter(user_id = self.request.user.id)

    def delete(self,*args,**kwargs):
       messages.success(self.request,'Post Deleted')
       return super().delete(*args,**kwargs)

##POSTS URLS

from django.urls import re_path
from . import views

app_name = 'posts'

urlpatterns = [
re_path(r'^$',views.PostList.as_view(),name='all'),
re_path(r'newpost/$',views.CreatePost.as_view(),name='create'),enter code here
re_path(r"by/(?P<username>[-\w]+)/$",views.UserPosts.as_view(),
name="for_user"),
re_path(r"by/(?P<username>[-\w]+)/(?P<pk>\d+)/$",views.PostDetail.as_view(),
name="single"),
re_path(r'delete/(?P<pk>\d+)/$',views.DeletePost.as_view(),name='delete'),
]

【问题讨论】:

  • 在代码中的某个地方,您反转到名为“posts:for_user”的路径,并提供一个空的用户名作为参数。您执行此操作的代码不在粘贴的代码中。您在 Class Post 的 get_absolute_url 中做了类似的事情,但反向名称是“posts:single”
  • 在您的 urlspattern 的第二行中留下了一些文本“在此处输入代码”,这可能来自复制粘贴错误。只是作为一个提示

标签: python django


【解决方案1】:

谢谢@Razenstein ....这是一个模板错误....

''' {% 扩展“groups/group_base.html”%}

  {% block pregroup %}
   <div class="col-md-4">
    <div class="content">
     {% if user.is_authenticated %}
     <h2>
      Welcome Back!
      <a href="{% url 'posts:for_user' username=user.username 
          %}">@{{user.username}}</a>
      </h2>
     {% endif %}

'''

我写过

【讨论】:

猜你喜欢
  • 2023-03-17
  • 2016-11-12
  • 1970-01-01
  • 1970-01-01
  • 2016-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多