我正在为当地珠宝店建立一个演示网站,我正在尝试创建一个珠宝品牌列表(ListView),并在其他页面中将每个品牌链接到它的描述(DetailView)。我花了坚实的15个小时尝试将我的ListView和我的DetailView链接在一起,我还没有修复任何东西。这些是我正在使用的观点:如何将我的DetailView和我的ListView链接在一起?
视图
class BrandView(ListView):
template_name = 'products.html'
queryset = models.Brand.objects.order_by('brand_name')
context_object_name = 'brand_list'
对于该第一视图,我创建显示从查询集的每个对象作为链接到其对应的详细信息页面,一个模板,该模板应该由下一个视图来表示:
class TextView(DetailView):
template_name = 'brands/brand_text.html'
context_object_name = 'brand'
def get(self, request, slug):
# Grabs the Brand object that owns the given slug
brand = models.Brand.objects.get(slug = slug)
# renders self.template_name with the given context and model object
return render(request, self.template_name, self.context_object_name)
我也试着写了最后一页常规功能,但这并不要么一事无成:
def text_view(request, slug):
brand = models.Brand.objects.get(slug = slug)
return render(request, 'brands/brand_text.html', {'brand': brand,})
基本上,当我从ListView中点击一个对象时,对象的slug被添加到了url中,但是页面没有改变。那么如何成功地链接我的两个视图,以便DetailView获取从ListView中给出的信息?
也许我的模板可能证明方便:
模板
brand_text.html
{% block content %}
<div class= "brands" style="animation: fadein 1.5s 1;">
<p>
<a class = "nav_link" href="{% url 'products' %}">Back</a>
</p>
</div>
<div class= "brand_descriptions">
<p>{{ brand.description }}</p>
</div>
{% endblock %}
products.html放在
{% block content %}
<div class= "brands" style="animation: fadein 1.5s 1;">
{% for item in brand_list %}
<p>
<a class = "nav_link" href="{% url 'brand_text' item.slug %}">{{ item.brand_name }}</a>
</p>
{% endfor %}
</div>
{% endblock %}
UPDATE 2016年8月2日:
URL模式
url(r'^products/', BrandView.as_view(), name = 'products'),
url(r'^products/(?P<slug>[-\w]+)', TextView.as_view(), name = 'brand_text'),
(这是我的第一个问题,所以我道歉,如果它太长了!)
你可以把它作为一个建议,看看我将每个iteam存储在列表模型中,使用它的id和各自的id我会在每个iteam的DetailsModel中存储它的详细信息。因此,在发送iteam列表时,我会发送它的ID和任何我想要显示的基本信息。在点击那个特定的iteam之后,我会将与该iteam相对应的id传递给detailsView并获取Information.I将使用Ajax调用请求,以便它不会刷新我的页面。 –
请显示您的网址格式。 – Alasdair
@Alasdair感谢您的提及,我更新了我的文章,以便显示网址格式。 – GTech