Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 模板的多个模型通用详细视图_Django_Django Views - Fatal编程技术网

Django 模板的多个模型通用详细视图

Django 模板的多个模型通用详细视图,django,django-views,Django,Django Views,我有两个模型,我使用get\u context\u data方法使IndexView正常工作。但是,使用相同技术的myDetailView不起作用。如何简单地将两个模型放入详细视图 views.py from .models import CharacterSeries, CharacterUniverse class IndexView(generic.ListView): template_name = 'character/index.html' context_obj

我有两个模型,我使用
get\u context\u data
方法使
IndexView
正常工作。但是,使用相同技术的my
DetailView
不起作用。如何简单地将两个模型放入
详细视图

views.py

from .models import CharacterSeries, CharacterUniverse


class IndexView(generic.ListView):
    template_name = 'character/index.html'
    context_object_name = 'character_series_list'

    def get_queryset(self):
        return CharacterSeries.objects.order_by('name')

    def get_context_data(self, **kwargs):
        context = super(IndexView, self).get_context_data(**kwargs)
        context['character_universe_list'] = CharacterUniverse.objects.order_by('name')
        return context


class DetailView(generic.DetailView):
    model = CharacterSeries
    template_name = 'character/detail.html'

    def get_context_data(self, **kwargs):
        context = super(DetailView, self).get_context_data(**kwargs)
        context['character_universe_list'] = CharacterUniverse.objects.all()
        return context
我错过了一些东西;我需要将
CharacterUniverse
放入DetailView。我尝试使用的信息无效

谢谢大家

更新:

detail.html

<ul>
{% for series in characterseries.character_set.all %}
    <li>{{ series.name }}</li>
{% endfor %}
</ul>

<ul>
{% for universe in characteruniverse.character_set.all %}
    <li>{{ universe.name }}</li>
{% endfor %}
</ul>
也许这就是最终的解决方案?但是这不起作用。。命名错误


所有更新

视图.py

from django.shortcuts import get_object_or_404, render
from django.views import generic
from django.views.generic import DetailView
from .models import CharacterSeries, CharacterUniverse


class IndexView(generic.ListView):
    template_name = 'character/index.html'
    context_object_name = 'character_series_list'

    def get_queryset(self):
        return CharacterSeries.objects.order_by('name')

    def get_context_data(self, **kwargs):
        context = super(IndexView, self).get_context_data(**kwargs)
        context['character_universe_list'] = CharacterUniverse.objects.order_by('name')
        return context


class SeriesDetail(DetailView):
    model = CharacterSeries
    template_name = 'character/series_detail.html'

class UniverseDetail(DetailView):
    model = CharacterUniverse
    template_name = 'character/universe_detail.html'
from django.conf.urls import url

from . import views

urlpatterns = [
    url(r'^$', views.IndexView.as_view(), name='index'),
    url(r'^(?P<pk>[0-9]+)/$', views.SeriesDetail.as_view(), name='series_detail'),
    url(r'^(?P<pk>[0-9]+)/$', views.UniverseDetail.as_view(), name='universe_detail'),
]
url.py

from django.shortcuts import get_object_or_404, render
from django.views import generic
from django.views.generic import DetailView
from .models import CharacterSeries, CharacterUniverse


class IndexView(generic.ListView):
    template_name = 'character/index.html'
    context_object_name = 'character_series_list'

    def get_queryset(self):
        return CharacterSeries.objects.order_by('name')

    def get_context_data(self, **kwargs):
        context = super(IndexView, self).get_context_data(**kwargs)
        context['character_universe_list'] = CharacterUniverse.objects.order_by('name')
        return context


class SeriesDetail(DetailView):
    model = CharacterSeries
    template_name = 'character/series_detail.html'

class UniverseDetail(DetailView):
    model = CharacterUniverse
    template_name = 'character/universe_detail.html'
from django.conf.urls import url

from . import views

urlpatterns = [
    url(r'^$', views.IndexView.as_view(), name='index'),
    url(r'^(?P<pk>[0-9]+)/$', views.SeriesDetail.as_view(), name='series_detail'),
    url(r'^(?P<pk>[0-9]+)/$', views.UniverseDetail.as_view(), name='universe_detail'),
]
从django.conf.url导入url
从…起导入视图
URL模式=[
url(r'^$',views.IndexView.as_view(),name='index'),
url(r'^(?P[0-9]+)/$',views.SeriesDetail.as_view(),name='series_detail'),
url(r'^(?P[0-9]+)/$',views.universedeail.as_view(),name='universe_detail'),
]
index.html

{% load staticfiles %}

<link rel ="stylesheet" type="text/css" href="{% static 'character/style.css' %}" />

<h1>Character Series</h1>

<ul>
  {% for character_series in character_series_list %}
    <li><a href="{% url 'character:series_detail' character_series.pk %}">{{ character_series.name }}</a></li>
  {% endfor %}
</ul>

<h1>Character Universe</h1>

<ul>
  {% for character_universe in character_universe_list %}
    <li><a href="{% url 'character:universe_detail' character_universe.pk %}">{{ character_universe.name }}</a></li>
  {% endfor %}
</ul>
<ul>
{% for series in characterseries.character_set.all %}
    <li>{{ series.name }}</li>
{% endfor %}
</ul>
<ul>
{% for universe in characteruniverse.character_set.all %}
    <li>{{ universe.name }}</li>
{% endfor %}
</ul>
{%load staticfiles%}
字符序列
    {character_series_list%}
  • {%endfor%}
性格世界
    {character_universe_列表%中的character_universe的百分比}
  • {%endfor%}
系列_detail.html

{% load staticfiles %}

<link rel ="stylesheet" type="text/css" href="{% static 'character/style.css' %}" />

<h1>Character Series</h1>

<ul>
  {% for character_series in character_series_list %}
    <li><a href="{% url 'character:series_detail' character_series.pk %}">{{ character_series.name }}</a></li>
  {% endfor %}
</ul>

<h1>Character Universe</h1>

<ul>
  {% for character_universe in character_universe_list %}
    <li><a href="{% url 'character:universe_detail' character_universe.pk %}">{{ character_universe.name }}</a></li>
  {% endfor %}
</ul>
<ul>
{% for series in characterseries.character_set.all %}
    <li>{{ series.name }}</li>
{% endfor %}
</ul>
<ul>
{% for universe in characteruniverse.character_set.all %}
    <li>{{ universe.name }}</li>
{% endfor %}
</ul>
    {characterseries.character\u set.all%}
  • {{series.name}
  • {%endfor%}
universe\u detail.html

{% load staticfiles %}

<link rel ="stylesheet" type="text/css" href="{% static 'character/style.css' %}" />

<h1>Character Series</h1>

<ul>
  {% for character_series in character_series_list %}
    <li><a href="{% url 'character:series_detail' character_series.pk %}">{{ character_series.name }}</a></li>
  {% endfor %}
</ul>

<h1>Character Universe</h1>

<ul>
  {% for character_universe in character_universe_list %}
    <li><a href="{% url 'character:universe_detail' character_universe.pk %}">{{ character_universe.name }}</a></li>
  {% endfor %}
</ul>
<ul>
{% for series in characterseries.character_set.all %}
    <li>{{ series.name }}</li>
{% endfor %}
</ul>
<ul>
{% for universe in characteruniverse.character_set.all %}
    <li>{{ universe.name }}</li>
{% endfor %}
</ul>
    {characteruniverse.character\u set.all%}
  • {{universe.name}
  • {%endfor%}
解释为什么不能对两种型号使用一个视图
DetailView
用于显示一个模型中对象的详细信息。可以包含额外的上下文,但视图的设计不能处理两个可能的模型

文档中的示例显示一个出版商的详细信息,同时显示所有书籍

DetailView允许您显示一个CharacterSeries的详细信息,并同时显示所有CharacterUniverse

但是,不能使用同一视图显示一个
CharacterUniverse
的详细信息。您需要不同的视图来显示一个
CharacterUniverse

解决方案 因此,您需要两个不同的详图视图,每个模型一个

每个视图都需要一个不同的url。否则,请求将始终匹配第一个正则表达式(在本例中为
series\u detail

url(r'^series/(?P<pk>[0-9]+)/$', views.SeriesDetail.as_view(), name='series_detail'),
url(r'^universe/(?P<pk>[0-9]+)/$', views.UniverseDetail.as_view(), name='universe_detail'),
url(r'^series/(?P[0-9]+)/$),views.SeriesDetail.as_view(),name='series_detail'),
url(r“^universe/(?P[0-9]+)/$”,views.universedeail.as\u view(),name='universe\u detail'),

不太清楚您想做什么。我在您发布的模板中没有看到任何链接。在您的
获取上下文\u数据
中,您将所有
字符世界
对象作为
字符世界\u列表
,但在模板中您指的是
字符世界
。您认为的位置不清楚de>characteruniverse来自。一个
DetailView
用于显示一个模型中某个对象的详细信息。可以包含额外的上下文,但该视图的设计不能处理两个可能的模型。我建议您创建第二个详细信息视图来显示特定的角色universe。该示例显示了o的详细信息您的
DetailView
允许您显示一个
CharacterSeries
的详细信息,并同时显示所有
CharacterUniverse
。但是,您不能使用同一视图显示一个
CharacterUniverse
的详细信息。因此,它不起作用连接到
{%url'字符:详细信息'character\u universe.pk%}
。是的,只需定义两个不同的视图,每个模型一个。确保它们都有不同的名称,并为每个视图创建不同的url模式。您需要显示两个视图的url,以及两个视图的链接。我希望您能够成功,因为您非常出色。它很有效;忽略了这一点,现在它非常有意义。非常感谢我们最后还有:)