Как работает «template.Library ()» и «get_related_name» работают в django?

#python #django

#python #django

Вопрос:

Я работаю над базовым проектом django для социальных сетей с помощью курса udemy. Ниже приведены модели, которые я создал:

     group : models.py

    register = template.Library()

    class Group(models.Model):
       name = models.CharField(max_length=255,unique=True)
       slug = models.SlugField(allow_unicode=True,unique=True) 
       description = models.TextField(blank=True,default='')
       description_html = models.TextField(editable=False,default='',blank=True)
       members = models.ManyToManyField(User,through="GroupMember")

    class GroupMember(models.Model):
       group = models.ForeignKey(Group,related_name='memberships',on_delete=models.CASCADE)
       user = models.ForeignKey(User,related_name='user_groups',on_delete=models.CASCADE)

    post : models.py        

    class Post(models.Model):
       user = models.ForeignKey(User,related_name='posts',on_delete=models.CASCADE)
       created_at = models.DateTimeField(auto_now=True)
       message = models.TextField()
       message_html = models.TextField(editable=False)
       group = models.ForeignKey(Group,related_name='posts',null=True,blank=True)
  

И часть, которая не имеет для меня никакого смысла, заключается в следующем:

     post_list.html

    {% for member_group in get_user_groups %}
    <a href="{% url 'groups:single' slug=member_group.group.slug %}">{{ member_group.group.name 
    }}</a></li>
    {% endfor %}

    {% for other_group in get_other_groups %}
    <a href="{% url 'groups:single' slug=other_group.slug %}">{{ other_group.name }}</a></li>
    {% endfor %}
  

Что означает «get_user_groups», «get_other_groups» и «register = template.» Library ()» означает здесь и как они связаны? Также чего они пытаются достичь здесь? Я невежественный, ребята, помогите мне.

Комментарии:

1. get_user_groups будет контекстной переменной, которая передается шаблону из представления, кроме того, она кажется итеративной.

2. Я надеюсь, что у вас будет более подробная информация из официального документа Django

3. Вы используете register = template.Library() , когда создаете пользовательский тег шаблона или фильтр. Этой строки не должно быть models.py , и если вы не используете ее где-то в том же файле (например register.tag , или register.filter , тогда она ничего не делает.

4. Вы не показали никакого кода, включающего get_user_groups or get_user_groups , поэтому мы не можем объяснить, что это такое.

Ответ №1:

Это пример пользовательских тегов шаблонов. Вероятно, существует custom_tags.py файл, в котором вы создали пользовательские теги шаблонов, находится в папке с именем template_tags, которая показывает проделанную работу по созданию содержимого этих тегов.

get_user_groups не извлекается из views.py или непосредственно ссылаясь на ваш models.py . Вместо этого он ссылается на запросы, хранящиеся в custom_tags.py

Подробную разбивку можно найти здесь: https://medium.com/@hiteshgarg14/creating-custom-template-tags-in-django-application-7bd1dcfeb144

Это может быть полезно, если вы хотите отображать содержимое запроса в различных представлениях без необходимости избыточной вставки этого запроса в несколько функций внутри views.py . В этом случае, похоже, он будет использоваться для вставки информации о членстве в группах в различных представлениях с помощью пользовательских тегов.