@shadrin_ss
Junior

При переходе на пост не могу получить данные из БД именно по этому посту, как реализовать?

На сайт вывожу все записи что есть в БД при переходе на линк генерируется ссылка исходя из ID
Но уже на странице поста не могу получить данные из Бд именно по этому посту.

urls
urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^$', ListView.as_view(queryset=AllFilms.objects.all().order_by("-date")[:12], template_name="main/homepage.html")),
    url(r'^(?P<pk>\d+)$', DetailView.as_view(model = AllFilms, template_name="main/post.html"))
    ]

views
def index(request):
	posts = AllFilms.objects.all()
	return render(request, 'main/homepage.html', context = {'posts' : posts})

Как я понял из урока по которому пишу дело в файле urls но почему то не понял что именно сделал не так
Запрос такой:
{% extends "main/wrapper.html" %}

{% block content %}
	<a>{{ film.title }}</a>
{% endblock %}


Как правильно описать запрос?
  • Вопрос задан
  • 53 просмотра
Решения вопроса 1
stympel
@stympel
подпивасник
Вообще, используйте class based veiws, то есть вьюхи, на основе классов. Здесь я приведу пример вывода списка книг (без наследования от ListView, чтобы лучше понимать, как это работает). Предположим, эти книги будут карточками в шаблоне и у каждой карточки есть кнопка для переходя к этой книге.

В классе модели нужно определить метод get_absolute_url. В конце ответа поймете, зачем он.

models.py
Посмотрите, что такое reverse в документации.
class Book(models.Model):
    title = models.CharField(...)
    ...

    def get_absolute_url(self):
        return reverse("book-detail-page-url", args=[str(self.id)]


urls.py
Создаем урлы для списка книг и для конкретной книги с конкретным айди.
urlpatterns = [
    path("books/", BooksListView().as_view(), name="books-page-url"),
    path("book/<id>/", BookDetailView().as_view(), name="book-detail-page-url")
]


views.py
class BookListView(View):
    def get(self, request):
        books = Book.objects.all()
        return render(request, "books.html", context={"books": books})


class BookDetailView(View):
    def get(request, id):
        book = Book.objects.filter(id=id)
        return render(request, "book_detail.html", context={"book": book})


books.html
Чтобы по кнопке перейти к определенной книге, Джанга будет использовать тот самый метод get_absolute_url. Что делает этот метод вообще? Когда к нему обращаются он переносит пользователя на урл с именем "book-detail-page-url" то есть "book/id/". Этот самый айди мы передаем в этом же методе через args.
...
{% for book in books %}
    {{ book.title }}
    ...
    <a href="{{ book.get_absolute_url }}" class="btn btn-primary">Подробнее</a>
    ...
{% endfor %}


book_detail.html
...
{{ book.title }}
...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы