将pk传递到Django中的另一个模板
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将pk传递到Django中的另一个模板相关的知识,希望对你有一定的参考价值。
基本上我想做的是使用生成的链接与pk:
让我们说127.0.0.0:8000/27/
访问该pk以便在另一个带有if语句的模板中使用它,例如:
{% for book in Books %}
{% if book.pk == category.pk %}
<!-- Generate some html here-->
在我的项目中,我通过将对象的pk作为变量传递来生成链接,例如:
{% for category in Categories %}
<a href="{{ category.pk }}">
在我的主要urls.py中:
...
path('<int:pk>/',v.BookList.as_view(slug="pk")),
...
在我的app / views.py中:
class BookList(LoginRequiredMixin, ListView):
login_url = 'accounts/login/'
template_name = 'ListsViews/BookList.html'
model = Book
context_object_name = "Books"
slug = "pk"
def get_object(self, queryset=None):
return queryset.get(slug=self.slug)
在app / models.py中
class Category(models.Model)
book_name = models.CharField(
max_length=10,
default=_lazy('Tech'),
choices=Grade
)
class Book(models.Model)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
book_name = models.CharField(
max_length=10,
default=_lazy('Learn Python'),
choices=Grade
)
答案
您可以使用pk
从URL获取self.kwargs['pk']
。列表视图没有get_object
方法 - 您应该重写get_queryset
。
class BookList(LoginRequiredMixin, ListView):
login_url = 'accounts/login/'
template_name = 'ListsViews/BookList.html'
model = Book
context_object_name = "books" # NB Usual style in Django is lowercase books instead of Books
def get_queryset(self):
return super(BookList, self).get_queryset().filter(category=self.kwargs['pk'])
这意味着您的查询集将只包含该类别的书籍,因此您不必检查模板中的类别。
{% for book in books %}
{{ book }}
{% endfor %}
我认为在视图或slug="pk"
中不需要v.BookList.as_view(slug="pk")
,所以我会删除它。
urlpatterns = [
...
path('<int:pk>/',v.BookList.as_view()),
...
]
以上是关于将pk传递到Django中的另一个模板的主要内容,如果未能解决你的问题,请参考以下文章
如何使用java将数据从片段传递到android中的另一个片段?
如何将数据从一个活动传递到android中的另一个活动片段? [复制]