代码之家  ›  专栏  ›  技术社区  ›  NeoVe

按ChoiceField-Django筛选模板

  •  0
  • NeoVe  · 技术社区  · 7 年前

    考虑一下Django上的这个模型:

    class My_model(models.Model):
        my_choices = { '1:first' 2:second'}
        myfield1=CharField()
        myfield2=CharField(choices=my_choices)
    

    然后在我的表格上:

    class My_form(forms.ModelForm):
        class Meta:
        model = My_model
        fields = ['myfield1', 'myfield2']
    

    我的观点:

    def get_name(request):
        if request.method == 'POST':
            form = My_form(request.POST)
            if form.is_valid():
                return HttpResponseRedirect('/')
        else:
            form = My_form()
    
        return render(request, 'form/myform.html', {'form': form})
    

    {% extends "base.html" %}
    {% block content %}
    
    <form action="/tlevels/" method="POST">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Submit">
    </form>
    {% endblock %}
    

    {% extends "base.html" %}
    {% block content %}
    
    {% load crispy_forms_tags %}
    <div class="p-3 mb-2 bg-info text-white" style="margin-left:20px; margin-bottom:20px;">Status</div>
    <div class="form-row" style="margin-left:20px; margin-bottom:20px; margin-top:20px;">
      <div class="form-group col-md-6 mb-0">
        {{ form.myfield1|as_crispy_field }}
      </div>
      <div class="form-group col-md-6 mb-0">
        {{ form.myfield2|as_crispy_field }}
      </div>
    </div>
    <input type="submit" class="btn btn-primary" value="Submit" style="margin-left:20px;">
    </form>
    {% endblock %}
    

    我想要的是有另外两个不同的模板,不管它们有什么不同,然后根据在ChoiceField上所做的选择来加载它们,我想有一种方法可以是在视图上,通过添加某种条件,然后加载一个不同的模板(html文件)。

    有什么想法吗?

    0 回复  |  直到 7 年前
        1
  •  1
  •   bogeymin    7 年前

    可以使用 {% include %} 有一个变量。

    def some_view_after_post(request):
        # ... lookup value of myfield2 ...
        return render(request, "path/to/after_post.html", {'myfield2: myfield2})
    
    

    after_post.html 模板:

    <!-- include a template based on user's choice -->
    <div class="user-choice">
    {% include myfield2 %}
    </div>