【问题标题】:Unable to use Template Tags无法使用模板标签
【发布时间】:2019-11-06 17:51:05
【问题描述】:

我正在尝试创建一个带有相关下拉列表的表单,到目前为止,我已经能够添加所需的触发器,但我只是注意到响应消息没有呈现模板标签 甚至我尝试添加模板标签的其他 HTML 文件也会被忽略 我不知道是什么导致了这种错误

在查看了其他一些帖子后,这些帖子说如果我要使用 {% load XYZ %}。我应该在我所有的 HTML 页面中使用这个加载标签,但这并没有解决我的问题

我的意见.py:

from django.shortcuts import render,redirect
from django.views.generic.base import TemplateView
from status.forms import StatusForm
from status.models import FlightStatus
from django.views.generic import ListView, CreateView, UpdateView
from postlog.models import Flight
from django.urls import reverse_lazy
# Create your views here.
class StatusPageView(CreateView):

    template_name = "status/home.html"
    model = FlightStatus
    form_class = StatusForm
    success_url = reverse_lazy('status') 

def load_park_bay(request):
    flightid = request.GET.get('flight1')
    parks = Flight.objects.filter(fl_no='flightid').order_by('park_bay')
    context = {'parks': parks}
    return render(request, 'status/park_bay_dropdown_list.html', context)

我的 urls.py:

from django.urls import path,include
from . import views
from django.contrib.staticfiles.urls import staticfiles_urlpatterns

urlpatterns = [
    path('', views.StatusPageView.as_view(), name='status'),
    path('ajax/load-park/', views.load_park_bay, name='ajax_load_park'),
]

我的表单所在的主页 home.html:

{% extends 'base_template1.html' %}
{% load static from staticfiles %}
{% load crispy_forms_tags %}

<!DOCTYPE html>

{% block title %} Status {% endblock %}

{% block content %} 
<div class="modal fade" id="Add_Modal" tabindex="-1" role="dialog" aria-labelledby="Add_ModalLabel" aria-hidden="true">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="AddModalLabel">Flight Details</h5>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body">
        <form method="post" id="statusForm" data-parks-url="{% url 'ajax_load_park' %}" novalidate>
            {% csrf_token %}
            {{ form|crispy }}
        <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Add Details</button>
      </div>
        </form>
      </div>
    </div>
  </div>
</div>
<script
  src="https://code.jquery.com/jquery-3.4.1.js"
  integrity="sha256-WpOohJOqMqqyKL9FccASB9O0KwACQJpFTUBLTYOVvVU="
  crossorigin="anonymous"></script> 
  <script>
    $("#id_fl_no").change(function () {
      var url = $("#statusForm").attr("data-parks-url");
      var flightId = $(this).val();

      $.ajax({
        url: url,
        data: {
          'flight1': flightId
        },
        success: function (data) {
          $("#id_park_bay").html(data);
        }
      });

    });
  </script>
{%endblock%}

html 响应作为对 ajax 请求 park_bay_dropdown.html 的响应:

{% load static from staticfiles %}
{% load crispy_forms_tags %}

<option value="">---------</option>
{% for park in parks %}
    <option value="{{ park.fl_no }}">{{ park.park_bay }}</option>
{% endfor %}

收到的回复:link 即使我尝试发送表单实例作为显示完整表单的上下文,也没有显示任何模板标签

【问题讨论】:

    标签: python django django-forms django-templates


    【解决方案1】:

    由于您将来自 ajax 的 'flight1' 的值存储在变量 flightid 中。所以你需要在Query中写没有''的flightid。并且还要不断练习将来自 Ajax 的 id 转换为 int 以避免在通过 ORM 查询时出现任何错误。所以你的观点会是这样的。

    def load_park_bay(request):
        flightid = int(request.GET.get('flight1'))
        parks = Flight.objects.filter(fl_no=flightid).order_by('park_bay')
        context = {'parks': parks}
        return render(request, 'status/park_bay_dropdown_list.html', context)
    

    【讨论】:

    • 这仅在作为字符字段的 fl_no 具有诸如 1、2、3 等数值的情况下才有效,但如果这些值类似于 EK565、Eb565,则它可能不起作用。根据 Id 值查询会更好吗
    • 是的,你是对的。仅当存在数值时才有效。
    猜你喜欢
    • 2014-03-20
    • 2011-05-28
    • 2012-01-26
    • 2019-11-16
    • 2011-06-15
    • 1970-01-01
    • 2016-07-06
    • 2018-06-07
    • 1970-01-01
    相关资源
    最近更新 更多