django中的模板标签变量未显示

时间:2020-05-09 17:00:47

标签: django

我正在建立一个博客,并且是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 %}

从现在开始谢谢!

2 个答案:

答案 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实例的属性-不是查询集的属性。

您可以执行以下任一操作:

  1. 使用this_post
Post.objects.filter()
  1. ...或将post_title添加到查询集:
get()

有什么区别?

    如果未找到Post,则
  1. Post.objects.get(post_slug=slug) 将返回一个实例或引发first()异常。
  2. Post.objects.filter(post_slug=slug).first() 将返回来自查询集(作为模型实例)或get()的第一个结果(如果未找到任何内容)。