Django 德扬戈。对象来自多个模型,如何正确显示url?
我有两个模型。我按这些模型过滤对象,并在模板中显示它们。 一切正常,但url出现错误 myURL.pyDjango 德扬戈。对象来自多个模型,如何正确显示url?,django,Django,我有两个模型。我按这些模型过滤对象,并在模板中显示它们。 一切正常,但url出现错误 myURL.py path('objects_model_A/<int:objects_A_id>', views.objects_A, name='objects_model_A'), path('objects_model_B/<int:objects_B_id>', views.objects_B, name='objects_model_B'), def index(reque
path('objects_model_A/<int:objects_A_id>', views.objects_A, name='objects_model_A'),
path('objects_model_B/<int:objects_B_id>', views.objects_B, name='objects_model_B'),
def index(request):
objects_A = objects_A.objects.all().filter(is_published=True)
objects_B = objects_B.objects.all().filter(is_published=True)
queryset_list = list(chain(objects_A, objects_B))
context = {'queryset_list': queryset_list}
return render(request, 'templates/index.html', context)
def objects_A(request, objects_A_id):
objects_A = get_object_or_404(objects_a, pk=objects_A_id)
context = {
'objects_A': objects_A
}
return render(request, 'templates/objects_A.html', context)
def objects_B(request, objects_B_id):
objects_B = get_object_or_404(objects_b, pk=objects_B_id)
context = {
'objects_A': objects_A
}
return render(request, 'templates/objects_B.html', context)
我的模板.html
{% if queryset_list %}
{% for listing in queryset_list %}
<div class="col-md-6 col-lg-4 mb-4">
<div>
<a href="{% url 'objects_model_A' listing.id %}">Link
</a>
{% endfor %}
{% endif %}
具有模型的对象\u B,url也是:
http://127.0.0.1:8000/objects_A/1
我理解模板中的错误。第
行通常在模型级别使用。因此,您可以这样实现:
from django.urls import reverse
class objects_A(models.Model):
# ...
def get_absolute_url(self):
return reverse('objects_model_A', kwargs={'objects_A_id': self.pk})
class objects_B(models.Model):
# ...
def get_absolute_url(self):
return reverse('objects_model_B', kwargs={'objects_B_id': self.pk})
从django.url反向导入
类对象(models.Model):
# ...
def get_绝对_url(自身):
返回反向('objects\u model\u A',kwargs={'objects\u A\u id':self.pk})
类对象(models.Model):
# ...
def get_绝对_url(自身):
返回反向('objects\u model\u B',kwargs={'objects\u B\u id':self.pk})
然后,您可以在模板中使用:
{% for listing in queryset_list %}
<div class="col-md-6 col-lg-4 mb-4">
<div>
<a href="{{ listing.get_absolute_url }}">Link</a>
</div>
</div>
{% endfor %}
{%用于在queryset_列表%中列出]
{%endfor%}
Django有一些工具将get\u absolute\u url
考虑在内。例如,您可以使用get\u absolute\u url
方法将模型对象传递给a,然后Django将重定向到该对象的get\u absolute\u url()
结果。Willem Van Onsem,您好!这是我唯一需要的!!谢谢,效果很好!
http://127.0.0.1:8000/objects_B/1
from django.urls import reverse
class objects_A(models.Model):
# ...
def get_absolute_url(self):
return reverse('objects_model_A', kwargs={'objects_A_id': self.pk})
class objects_B(models.Model):
# ...
def get_absolute_url(self):
return reverse('objects_model_B', kwargs={'objects_B_id': self.pk})
{% for listing in queryset_list %}
<div class="col-md-6 col-lg-4 mb-4">
<div>
<a href="{{ listing.get_absolute_url }}">Link</a>
</div>
</div>
{% endfor %}