我正在建立一个博客,并且是django的新手。我正在尝试建立一个帖子显示页面,但标记变量不起作用。
urls.py
urlpatterns = [
.
.
.
path('post/<slug>/', views.post_detail, name='post_detail'),
]
views.py
.
.
.
def post_detail(request, slug):
all_posts= Post.objects.all()
this_post = Post.objects.filter(post_slug=slug)
return render(request = request,
template_name = 'blog/post_detail.html',
context = {'this_post':this_post, 'all_posts':all_posts})
.
.
.
post_detail.html
{% extends 'blog/header.html' %}
{% block content %}
<div class="row">
<div class="s12">
<div class="card grey lighten-5 hoverable">
<div class="card-content teal-text">
<span class="card-title">{{ this_post.post_title }}</span>
<p style="font-size:70%">Published {{ this_post.post_published }}</p>
<p>{{ this_post.post_content }}</p>
</div>
</div>
</div>
{% endblock %}
从现在开始谢谢!
答案 0 :(得分:1)
代替过滤,需要带出单个对象,然后在详细视图中只有它可用。文件管理器的输出将是一个列表。
this_post = Post.objects.get(post_slug=slug)
或
this_post = get_object_or_404(Post, post_slug=slug)
答案 1 :(得分:0)
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div class="col-xs-6" id="app">
<div class="form-group">
<label for="brand">Brand</label>
<select class="form-control" name="brand" id="brand" v-model="brand">
<option :value="null" disabled selected>Select Brand</option>
<option v-for="option in brands_options" v-bind:value="option.id" >{{ option.text}}</option>
</select>
</div>
<div class="form-group">
<label for="model">Model</label>
<select class="form-control" name="model" id="model" v-model="model">
<option :value="null" disabled selected>Select Model</option>
<option v-for="option in model_options[brand]" v-bind:value="option.id" v-bind:key="option.id">{{option.text}}</option>
</select>
</div>
</div>
不是Model实例-它是一个Queryset。 var location = new Vue({
el: "#location",
data: {
heading: "Vue Select Cascade",
District: null,
City: null,
Districts_options: [
{ text: "Rathnapura",id: 'Rathnapura' },
{ text: "Kegalle",id: 'Kegalle' },
{ text: "Colombo",id: 'Colombo' },
{ text: "Gampaha",id: 'Gampaha' }
],
City_options: {
'Rathnapura': [
{ text: "Eheliyagoda", id: 'Eheliyagoda' },
{ text: "Kuruwita", id: 'Kuruwita' }
],
'Kegalle': [
{ text: "Mawanella", id: 'Mawanella' },
{ text: "Kegalle", id: 'Kegalle' }
],
'Colombo': [
{ text: "Awissawella", id: 'Awissawella' },
{ text: "Homagama", id: 'Homagama' }
],
'Gampaha': [
{ text: "Gampaha", id: 'Gampaha' },
{ text: "Minuwangoda", id: 'Minuwangoda' }
]
}
}
});
始终返回一个查询集,即使只有一条记录也是如此。属性<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div class="col-xs-6" id="location">
<div class="form-group">
<label for="District">Select District</label>
<select class="form-control" name="District" id="District" v-model="District">
<option :value="null" disabled selected>Select District</option>
<option v-for="option in Districts_options" v-bind:value="option.id" >{{ option.text}}</option>
</select>
</div>
<div class="form-group">
<label for="City">City</label>
<select class="form-control" name="City" id="City" v-model="City">
<option :value="null" disabled selected>Select City</option>
<option v-for="option in City_options[District]" v-bind:value="option.id" v-bind:key="option.id">{{option.text}}</option>
</select>
</div>
</div>
是Post实例的属性-不是查询集的属性。
您可以执行以下任一操作:
this_post
:Post.objects.filter()
post_title
添加到查询集:get()
有什么区别?
Post.objects.get(post_slug=slug)
将返回一个实例或引发first()
异常。 Post.objects.filter(post_slug=slug).first()
将返回来自查询集(作为模型实例)或get()
的第一个结果(如果未找到任何内容)。