Django urls обрабатывают slug с sla sh внутри, например, / main / subpage - PullRequest
0 голосов
/ 29 мая 2020

У меня есть это в моем urls.py

path('<str:slug>', views.page, name='page'),

, который я хочу обрабатывать любые ссылки, которые не были пойманы выше, подумайте о слаге как о URL-ссылке, которая может быть глубокой, как main\subpage\sub-sub-link который я могу сопоставить со страницей.

Дело в том, что похоже, что слаг будет обрабатывать только один слой, например \main, есть ли способ передать всю эту информацию о подссылке, например domain.com/this/that/that-that, чтобы мой слаг был this/that/that-that

Ответы [ 2 ]

0 голосов
/ 29 мая 2020

Вероятно, вам следует использовать get_absolute_url()

В вашем models.py

from django.urls import reverse

# some model...

class Post(models.Model):
    slug = models.SlugField()

    # ...other model parameters

    def get_absolute_url(self):
        return reverse('<your_app_name>:page', {'slug':self.slug})

В вашем urls.py

path('<slug>/', views.page, name='page'),

В вашем views.py

from .models import Post

def page(request):
  posts = Post.objects.all()

  context = {
       'posts':posts
   }
   return render('path_to_your_template.html', request, context)

В вашем шаблоне . html Вы можете сделать

{%for post in posts %}
    <a href={{post.get_absolute_url}}>{{post.title}}</a>
{%endfor%}
0 голосов
/ 29 мая 2020

вы можете использовать его как path('<slug:post>/', views.page, name='page')

Но помните, что ваша функция страницы должна принимать сообщение как параметр slug.

Like

def page(request, post):
  post = get_object_or_404(model_name, post)

И при использовании тега для ссылок вы можете использовать это как href="{% url 'page' post.slug %}"

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