Django中的get_absolute_url id和slug
Posted
技术标签:
【中文标题】Django中的get_absolute_url id和slug【英文标题】:get_absolute_url id and slug in Django 【发布时间】: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 %
【问题讨论】:
【参考方案1】:我认为在 Book 模板中,您应该将书名放在 <a>
标记内。
所以
% 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 %
【讨论】:
以上是关于Django中的get_absolute_url id和slug的主要内容,如果未能解决你的问题,请参考以下文章
为啥 django page cms get_absolute_url 返回一个空字符串?
在 Django auth 中设置 `get_absolute_url`
如何在 Django 模板中使用带有外键对象的 get_absolute_url()