【问题标题】:Django 1.8 using multiple DetailViewDjango 1.8 使用多个 DetailView
【发布时间】:2015-08-25 07:43:12
【问题描述】:

我一直在尝试在我的views.py 中使用多个DetailView,但由于某种原因,我在模板渲染期间遇到了这个错误。 http://prntscr.com/7f8vql http://prntscr.com/7f8vlv.

我的views.py

def rock_and_feat(request):
    feats = Feat.objects.order_by('-created')[:3]
    rocks = Rockinfo.objects.order_by('-rank')[:50]
    context = RequestContext(request, {
    'feats': feats, 'rocks': rocks
    })
    return render_to_response('template.html', context)


class DetailView(generic.DetailView):
    model = Feat
    template_name = 'feature/detail.html' 
    context_object_name = 'feat'

class RockDetailView(generic.DetailView):
    model = Rockinfo
    template_name = 'feature/detailrock.html' 
    context_object_name = 'rockinfo'

我的应用程序urls.py

urlpatterns = [

url(r'^$', views.rock_and_feat, name='rock_and_feat'),
url(r'^(?P<pk>[0-9]+)/$', views.DetailView.as_view(), name='detail'),
url(r'^(?P<pk>[0-9]+)/$', views.RockDetailView.as_view(),  name='detailrock'),
]

我的项目urls.py

urlpatterns = [
url(r'^', include('feature.urls', namespace="feature")),
url(r'^admin/', include(admin.site.urls)),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

template.html

   {% block rocker %}
      {% if rocks %}
          {% for item in rocks %}

              <div class="artist-container">
              <a href="{% url 'feature:detailrock' rockinfo.id %}"><img src="{{ item.rock_img.url }}" class="artist-img" alt="Dimitri Vegas &amp; Like Mike">
               <div class="artist-info">{{ item.rock_name }}</div></a></div>
           {% endfor %}
       {% else %}
               <p>No rockers are available.</p>
       {% endif %}
              </div></div>
   {% endblock %}

我不知道错误是什么。谢谢

【问题讨论】:

  • 你的 detail 和 detailrock 在你的 urls.py 中有相同的模式,也许和这个有关。
  • @vmonteco 我尝试更改模式,但出现了同样的错误。
  • 查看rockinfo|pprint

标签: python django


【解决方案1】:

我记得你关于rock_and_feat 的问题。

我想提几点:

urlpatterns = [
  url(r'^$', views.rock_and_feat, name='rock_and_feat'),
  url(r'^detail/(?P<pk>[0-9]+)/$', views.DetailView.as_view(), name='detail'),
  url(r'^rock_detail/(?P<pk>[0-9]+)/$', views.RockDetailView.as_view(), name='detailrock'),
]

您没有rockinfo。它是item。在这一行:

{% url 'feature:detailrock' item.id %}

还有一件事。请注意,id is not the samepk

{% url 'feature:detailrock' item.pk %}

最后一件事。这个可以替换:

   {% if rocks %}
      {% for item in rocks %}
          ....
      {% endfor %}
   {% else %}
       <p>No rockers are available.</p>
   {% endif %}

有了这个(docs):

   {% for item in rocks %}
       ...
   {% empty %}
       <p>No rockers are available.</p>
   {% endfor %}

【讨论】:

    【解决方案2】:

    (在这里猜测)阅读错误,在我看来rockinfo.id 为空或不存在(或未传递给模板),您检查了吗?

    除此之外,您应该有两种不同的视图模式

    希望对你有帮助

    【讨论】:

      【解决方案3】:

      1.请查看获取rockinfo.id的模板并查看。

      &lt;a href="{% url 'feature:detailrock' rockinfo.id %}"&gt;

      2.从 urlconf 中删除命名空间,只在模板中使用&lt;a href="{% url 'detailrock' rockinfo.id %}"&gt;

      我认为 1 或 2 都可以。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-10-29
        • 1970-01-01
        • 2019-09-02
        • 2017-05-22
        • 2020-04-30
        • 2023-03-07
        • 2016-02-21
        相关资源
        最近更新 更多