【问题标题】:get_absolute_url id and slug in DjangoDjango中的get_absolute_url id和slug
【发布时间】:2020-11-26 13:59:51
【问题描述】:

你好,我希望我的网址是这样的:

site.com/blog/books/details/[id]/[slug]

例如:site.com/blog/books/details/3/blind_owl

当我点击书名时,什么都不加载。甚至不显示错误。我想给我看说明

提前谢谢你

型号:

class Book(TimeStampMixin):
    id = models.AutoField(primary_key=True)
    author = models.ForeignKey(to=Author, on_delete=models.PROTECT)
    book_name = models.TextField()

    def __str__(self):
        return '{}'.format(self.book_name)

class Details(TimeStampMixin):
    book = models.ForeignKey(to=Book, on_delete=models.PROTECT)
    description = models.TextField()
    slug = models.SlugField(max_length=100, null=True, blank=True)

    def get_absolute_url(self):
        return reverse('blog:book_details', args=[self.pk, self.slug])

    def __str__(self):
        return '{}'.format(self.book)

主网址:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.home, name='home'),
    path('blog/', include('blog.urls')),
]

网址:

urlpatterns = [
    path('authors/', views.authors, name='authors'),
    path('books/', views.books, name='books'),
    path('books/details/<int:pk>/<slug:slug>/', views.book_details, name='book_details')

查看:

def books(request):
    book = Book.objects.all()
    context = {'books': book}
    return render(request, 'Blog/books.html', context=context)

def book_details(request, pk, slug):
    details = Details.objects.filter(pk=pk, slug=slug)
    context = {'details': details}
    return render(request, 'Blog/book_details.html', context=context)

书籍模板:

{% for each in books %}
<a href="{{ each.get_absolute_url }}">
    Book's Name: {{ each.book_name }}
</a>
{% endfor %}

图书详情模板:

{% for each in details %}
Description: {{ each.description }}
{% endfor %}

【问题讨论】:

    标签: python-3.x django django-models slug absolute-path


    【解决方案1】:

    我认为在 Book 模板中,您应该将书名放在 &lt;a&gt; 标记内。 所以

    {% for each in books %}
    <a href="{{ each.get_absolute_url }}">
        Book's Name: {{ each.book_name }}
    </a> <!-- ended tag here -->
    {% endfor %}
    

    【讨论】:

      【解决方案2】:

      试试这个

      class Details(TimeStampMixin):
      ...
        def get_absolute_url(self):
                return reverse('blog:book_details', kwargs={'id': self.id})
      ...
      

      和模板

      {% block content %}
          {% for obj in object_list %}
              <li>{{ forloop.counter }} - <a href="{{ obj.get_absolute_url }}">{{ obj.title }}</a></li>
              <br>
          {% endfor %}
      {% endblock %}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-10
        • 1970-01-01
        • 2011-04-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多