Как поместить заголовок страницы в шаблон URL с Django? - PullRequest
0 голосов
/ 07 мая 2020

Если бы я хотел отправить идентификатор записи блога в шаблон URL-адреса, и URL-адрес автоматически превратился бы во что-то вроде www.blog.com/post/2/this-is-my-second-blogpost, как я могу это сделать? шаблон, который принимает идентификатор сообщения в блоге и его заголовок. Похоже, это не работает, и когда это произойдет, будет утомительно добавлять заголовок для каждой страницы таким образом.

urls.py: path('post/<int:post_id>/<str:post_title>', views.view_post, name='view_post'),

blogposts. html шаблон: <a href="{% url 'blogs:view_post' post.id post.title%}">Read More</a>

views.py: def view_post(request, post_id, post_title):.

Ответы [ 2 ]

2 голосов
/ 07 мая 2020

Просто добавьте аргумент по умолчанию post_title как None. Если вы хотите получить post_title прямо из post_id, отключите post_title, это не приведет к ошибке, так как функции уже получили все удовлетворительные значения аргументов.

Итак:

def view_post(request, post_id, post_title=None):

Редактировать

Хорошо, пользователь хотел примерно slug field. Поле Slug - это тип поля в модели django. В основном он используется для типа url. В приведенной выше проблеме pyknight202 хотел указать URL-адрес для post_title. Таким образом, вы не можете использовать tilte напрямую в качестве URL-адреса, поскольку они содержат пробелы, поэтому для этого вам нужно добавить post_title в дефисах или подчеркивании, чтобы их можно было прочитать. Следовательно, вам нужно поле slug в модели Post.

https://helloworld.com/1/this-is-example

Итак, 1 равно post_id, так как slug не может быть уникальным, поэтому вы можете не только получать из post_title, поэтому вам нужно post_id слишком. Ссылка

1 голос
/ 09 мая 2020

Возможно, вам следует использовать поле slug для URL-адреса вместо комбинации идентификатора и заголовка, ваш URL-адрес будет выглядеть как example.org/title-to-object-2/. Теперь у вас есть уникальное поле заголовка с заголовком и идентификатором.

...