0

我尝试使用get_absolute_url创建lista_libri.htmllista_generi.html之间的链接。我已经在autore.htmllista_libri.html之间创建了一个链接,它运行良好。

但是,如果我激活lista_libri.htmllista_generi.html之间的链接,则结果为空白。

下面我分享定义模型、视图和模板的代码字符串。

模型.py

from django.db import models
from django.urls import reverse

class Genere(models.Model):
    nome = models.CharField(max_length=20)

    def __str__(self):
        return self.nome

    def get_absolute_url(self):
        return reverse("libri_genere", kwargs={"pk": self.pk})     

    class Meta:
        verbose_name = "Genere"
        verbose_name_plural = "Generi"

class Autore(models.Model):
    nome = models.CharField(max_length=20)
    cognome = models.CharField(max_length=20)
    nazione = models.CharField(max_length=20)

    def __str__(self):
        return self.nome + " " + self.cognome

    def get_absolute_url(self):
        return reverse("profilo_autore", kwargs={"pk": self.pk})

    class Meta:
        verbose_name = "Autore"
        verbose_name_plural = "Autori"

class Libro(models.Model):
    titolo = models.CharField(max_length=100)
    isbn = models.CharField(max_length=13)
    autore = models.ForeignKey(Autore, on_delete=models.CASCADE, related_name="libri")
    genere = models.ManyToManyField(Genere, related_name="generi")

    def __str__(self):
        return self.titolo

    class Meta:
        verbose_name = "Libro"
        verbose_name_plural = "Libri"    

视图.py

from django.views.generic.detail import DetailView
from django.views.generic.list import ListView
from .models import Autore, Libro, Genere

class AutoreDCBV(DetailView):
    model = Autore
    template_name = "autore.html"

class LibroLCBV(ListView):
    model = Libro
    template_name = "lista_libri.html"

class GenereDCBV(DetailView):
    model = Genere
    template_name = "lista_generi.html"

网址.py

from django.urls import path
from .views import LibroLCBV, AutoreDCBV, GenereDCBV

urlpatterns = [
    path('', LibroLCBV.as_view(), name='lista_libri'),
    path('autore/<int:pk>/', AutoreDCBV.as_view(), name='profilo_autore'),
    path('genere/<int:pk>/', GenereDCBV.as_view(), name='libri_genere'),
]

lista_generi.html

{% extends 'base.html' %}

{% block head_title %}{{ block.super }} | {{ genere }}{% endblock head_title %}

{% block content %}
  <h1>Genere: {{ nome }}</h1>
  <br>

  {% for gen in genere.generi.all %}

    <h4><strong>Titolo: </strong> {{ gen.titolo }} </h4>
    <h5><strong>Autore: </strong> {{ gen.autore }} </h5>
    <p><strong>ISBN: </strong> {{ gen.isbn }} </p>
    <hr>

  {% endfor %}

{% endblock content %}

lista_libri.html

{% extends 'base.html' %}

{% block head_title %}{{ block.super }} | Libreria{% endblock head_title %}

{% block content %}
  <h1>La nostra libreria:</h1>
  <br>

  {% for libro in object_list %}   

    <h4><strong>Titolo: </strong> {{ libro.titolo }} </h4>
    <h5><strong>Autore: </strong> <a href="{{ libro.autore.get_absolute_url }}">{{ libro.autore }}</a>  </h5>
    <h6><strong>Genere </strong></h6>
        {% for genere in libro.genere.all %}
          <a href="{{ libro.genere.get_absolute_url }}" class="badge badge-success">{{ genere }}</a>
        {% endfor %}
    <p><strong>ISBN: </strong> {{ libro.isbn }} </p>
    <hr>

  {% endfor %}

{% endblock content %}

怎么了?

4

1 回答 1

1
{{ libro.genere.get_absolute_url }}

libro.genere不是一个Genere实例。ManyRelatedManager您可以使用它来访问相关实例。由于libro.genere没有方法,因此在呈现的模板中将get_absolute_url其评估为空字符串。''

您已经在循环{% for genere in libro.genere.all %},因此您应该使用{{ genere.get_absolute_url }}.

{% for genere in libro.genere.all %}
    <a href="{{ genere.get_absolute_url }}" class="badge badge-success">{{ genere }}</a>
{% endfor %}
于 2018-08-30T11:04:09.470 回答