Одна страница поста URL-адрес Django - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть приложение для блога в django, и я хочу сделать шаблон для каждого поста, но он просто не работает. В чем может быть ошибка?

Вот мой код

Views.py

from django.shortcuts import render, render_to_response , get_object_or_404
from .models import Post


# Create your views here.
def index(request):
    posts=Post.objects.all()
    return render(request, 'Index.html', {"posts": posts})


def post(request, slug):
    print(slug)
    return render_to_response('post.html', {'post': get_object_or_404(Post, slug=slug)})

urls.py

...
urlpatterns = [
    path('post/(.*)', product_views.post),
    path('', product_views.index),
    path('admin/', admin.site.urls),
]

Ответы [ 2 ]

0 голосов
/ 24 апреля 2018

Не используйте render_to_response, оно устарело. Вместо этого используйте render.

def post(request, slug):
    post = get_object_or_404(Post, slug=slug)
    return render(request, 'post.html', {'post': post})

Тогда вам нужно исправить свой шаблон URL. Вы не должны использовать регулярные выражения, такие как .* с path(). Чтобы поймать слизняка, вы можете сделать:

path('post/<slug:slug>', product_views.post),
0 голосов
/ 24 апреля 2018

Вы можете использовать общий DetailView для более легкого достижения желаемого.

urls.py:

urlpatterns = [
    path('', product_views.index),
    path('admin/', admin.site.urls),
    path('post/<int:pk>', product_views.PostDetailView.as_view(), name='post-detail'),
]

views.py:

class PostDetailView(generic.DetailView):
    model = Post

Вот хороший урок от Mozilla, который проведет вас через.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...