获取反向匹配 Django 问题

时间:2021-02-24 14:40:33

标签: django django-models django-views

我收到 NoReverseMatch 错误: NoReverseMatch 在 / 未找到参数为 '(22, '')' 的 'post-detail' 反转。尝试了 1 个模式:['post/(?P[0-9]+)/(?P[-a-zA-Z0-9_]+)/$']

不知道如何解决这个问题,这里是一些代码:

urls.py

urlpatterns=[
    path('', PostListView.as_view(), name='home'),
    path('post/new/<slug:slug>/', views.create_post, name='post-create'),
    path('post/<int:pk>/<slug:slug>/', views.post_detail, name='post-detail'),
    path('like/<slug:slug>/', views.like, name='post-like'),
    path('post/<int:pk>/<slug:slug>/update/', PostUpdateView.as_view(), name='post-update'),
    path('post/<int:pk>/<slug:slug>/delete/', views.post_delete, name='post-delete'),
    path('search_posts/', views.search_posts, name='search_posts'),

饲料模型 模型.py

class Post(models.Model):
    description = models.TextField(max_length=255)
    pic = models.ImageField(upload_to='path/to/img', blank=True)
    date_posted = models.DateTimeField(default=timezone.now)
    user_name = models.ForeignKey(User, on_delete=models.CASCADE)
    tags = models.CharField(max_length=100, blank=True)

    def __str__(self): 
        return self.description

    def get_absolute_url(self):
        return reverse('post-detail', kwargs={'pk': self.pk, 'slug': self.user_name.profile.slug})

用户模型 模型.py

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    image = models.ImageField(default='default.png', upload_to='profile_pics')
    slug = AutoSlugField(populate_from='user')
    bio = models.CharField(max_length=255, blank=True)
    friends = models.ManyToManyField('Profile', blank=True)

    def __str__(self):
        return str(self.user.username)

    
    def get_absolute_url(self):
        return "/users/{}".format(self.slug)

views.py

@login_required
def post_detail(request, pk, slug):
    post = get_object_or_404(Post, pk=pk)
    user = request.user
    is_liked =  Like.objects.filter(user=user, post=post)
    if request.method == 'POST':
        form = NewCommentForm(request.POST)
        if form.is_valid():
            data = form.save(commit=False)
            data.post = post
            data.username = user
            data.save()
            return redirect('post-detail', pk=pk, slug=slug)
    else:
        form = NewCommentForm()
    return render(request, 'feed/post_detail.html', {'post':post, 'is_liked':is_liked, 'form':form})

home.html

{% extends "feed/layout.html" %}
{% load static %}
{% block cssfiles %}
{% endblock cssfiles %}
{% block searchform %}
<div class="container2">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" 
integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">

<form class="searchbar" action="{% url 'search_posts' %}" method="get"">
  <input class="postquery" name="p" type="text" autocomplete="off"/ placeholder="Search posts..">
  <button id="search_btn" type="submit">
  <i class="fa fa-search"></i>
  </button>
</form>
</div>


{% endblock searchform %}
{% block content %}
    <div class="container mt-7">
        <div class="row">
          <div class="col-xl-9 col-md-10 m-auto order-xl-2 mb-5 mb-xl-0">
            {% for post in posts %}
            <div class="card card-signin my-5">
              <div class="card-body">
                <a href="{{ post.user_name.profile.get_absolute_url }}"><img src="{{ post.user_name.profile.image.url }}" class="rounded-circle" width="30" height="30" alt=""></a>
                <a class="text-dark" href="{{ post.user_name.profile.get_absolute_url }}"><b>{{ post.user_name }}</b></a>
                <br><small class="text-muted">Posted on {{ post.date_posted }}</small>
                <br><br>
                <p class="card-text text-dark">{{ post.description }}</p>
              </div>
            {% if post.pic %}
              <a href="{% url 'post-detail' post.id user.profile.slug %}"><img class="card-img-top" src="{{ post.pic.url }}" alt=""></a>
            {% endif %}
              {% if post.tags %}
              <br>
              <p class="text-danger ml-3"><b>Tags: <i>{{ post.tags }}</i></b></p>
              {% endif %}
              <div class="card-footer">
                <button class="btn btn-white mr-3 like" id="{{ post.id }}">
                    {% if post in liked_post %}
                        <a href="{% url 'post-like' user.profile.slug %}" style="color:red;" id="likebtn{{ post.id }}"> Unlike</a> | {{post.likes.count}}
                    {% else %}
                        <a href="{% url 'post-like' user.profile.slug %}" style="color:green;" id="likebtn{{ post.id }}"> Like</a> | {{post.likes.count}}
                    {% endif %}
                </button>
                <a class="btn btn-outline-info" href="{% url 'post-detail' post.id user.profile.slug %}">Comments | {{ post.details.count }}</a>
              {% if post.user_name == user %}
              <a class="btn btn-outline-info mr-0 float-right" href="{% url 'post-update' post.id user.profile.slug %}">Edit Post</a>
              <a class="post_delete" href="{% url 'post-delete' post.id user.profile.slug %}">delete</a>
              {% endif %}
              </div>
            </div>
            {% endfor %}
           </div>
        </div>
    </div>

{% 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 content %}

当我点击主页链接时,我收到了上面提到的错误,不确定这个模板是什么原因导致的?有什么想法吗?

0 个答案:

没有答案
相关问题