简体   繁体   English

Django 1.8使用多个DetailView

[英]Django 1.8 using multiple DetailView

I've been trying to use multiple DetailView 's in my views.py but due to some reason I'm getting this error during template rendering. 我一直在尝试在我的views.py使用多个DetailView ,但由于某些原因我在模板渲染过程中遇到了这个错误。 http://prntscr.com/7f8vql http://prntscr.com/7f8vlv . http://prntscr.com/7f8vql http://prntscr.com/7f8vlv

My views.py 我的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'

My apps urls.py 我的应用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'),
]

My project's urls.py 我的项目是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 %}

I can't figure out what the error is about.Thanks 我无法弄清楚错误是什么。谢谢

I rememeber your question about rock_and_feat . 我记得你关于rock_and_feat的问题。

There are several things I want to mention: 我想提几件事:

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'),
]

You don't have rockinfo . 你没有rockinfo It is item . 这是item In this line: 在这一行:

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

One more thing. 还有一件事。 Note, that id is not the same as pk . 注意,该id pk

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

One last thing. 最后一件事。 This can be replaced: 这可以替换:

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

With this ( docs ): 有了这个( docs ):

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

(wild guess here) Reading the error, it seems to me that rockinfo.id is empty or it doesn't exists (or not passed to the template), have you checked that? (疯狂猜测这里)读错误,在我看来, rockinfo.id是空的或它不存在(或没有传递给模板),你检查过吗?

Besides that, you should have two different patterns for the views 除此之外,您应该有两种不同的视图模式

Hope this helps 希望这可以帮助

1.Please check template for getting rockinfo.id and check. 1.请检查模板以获取rockinfo.id并检查。

<a href="{% url 'feature:detailrock' rockinfo.id %}">

2.Remove namespace from urlconf and just use <a href="{% url 'detailrock' rockinfo.id %}"> in template. 2.从urlconf中删除命名空间,只需在模板中使用<a href="{% url 'detailrock' rockinfo.id %}">

I think either 1 or 2 will work. 我认为1或2都可以。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM