Django шаблон с get_absolute_url () с использованием args не работает - PullRequest
1 голос
/ 06 января 2020

Возникают проблемы с использованием get_absolute_url () с аргументами для работы в моем шаблоне (возможно, я делаю это неправильно на стороне шаблона)

Я получаю сообщение об ошибке person_id is not defined

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

class Course(models.Model):
    year = models.ForeignKey(Year, on_delete=models.PROTECT)
    name = models.CharField(max_length=50)
    short_name = models.CharField(max_length=50)
    created = models.DateTimeField(auto_now=False, auto_now_add=True)
    last_updated = models.DateTimeField(auto_now=True, auto_now_add=False)

Она имеет get_absolute_url, которая выглядит следующим образом:

    def get_absolute_url(self):
        """Return absolute url for Course."""
        return reverse(
            "view_course", args=[
                person_id, 
                location_id, 
                str(self.id)
            ]
        )

, и у меня есть мой URL, который выглядит как это:

    path(
        "<person_id>/locations/<location_id>/course/<pk>/",
        views.CourseDetailView.as_view(),
        name="view_course",
    ),

В моем шаблоне я пробовал несколько разных способов, чтобы отобразить это, в настоящее время это выглядит так:

    {% for section in sections %}
        <a id="course{{section.course.id}}" href="{{person.id}}/locations/{{location.id}}/course/{{ section.course.get_absolute_url }}" class="card-link location-course-link">{{ location.person }}</a>{{section.course.short_name}}
    {% endfor %}

Я также пробовал: href="{{ section.course.get_absolute_url }}"

Также пробовал: href="{{ section.course.get_absolute_url person.id location.id }}"

Хотя все данные верны (URL-адрес выходит на 1/locations/3/course/5/, как и ожидалось в шаблоне - он по-прежнему выдает эту ошибку при нажатии).

1 Ответ

1 голос
/ 06 января 2020

Вы не можете использовать get_absolute_url для этого . get_absolute_url метод [Django -doc] имеет целью:

Определить метод get_absolute_url(), чтобы сообщить Django, как рассчитать канонический URL для объекта . По мнению вызывающих, этот метод должен возвращать строку, которая может использоваться для ссылки на объект по HTTP.

Таким образом, это означает, что URL-адрес полностью определяется объектом (через его поля или через поля связанных объектов). Но здесь, насколько я вижу, нет способа получить person_id.

Что вы используете {% url &hellip; } шаблонный тег [Django - doc] для вычисления обратного URL:

<a id="course{{section.course.id}}" href="<b>{% url 'view_course' person.id location.id section.course.id %}</b>" class="card-link location-course-link">{{ location.person }}</a>
...