Materialize CSS (with django)下拉式表单无法使用。

问题描述 投票:0回答:1

我试图创建一个表单,让用户选择一个已经保存在数据库中的模型对象(发票)实例并提交。我已经尝试初始化JS,但在html中使用JS的经验很少,所以我不能完全确定我做的是否正确。

现在,下面的代码除了表单中的提交按钮外,没有任何其他内容。我试过添加一个随机输入字段(成功了),也试过在同一页面上将 "发票 "上下文解包并渲染为原始文本(也成功了),所以我想我已经将问题缩小到了表单选择上。

header.html

<head>
    {% load static %}

    <!-- Compiled and minified JavaScript -->
    <script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>
    <!-- Compiled and minified CSS -->
    <meta name = "viewport" content = "width = device-width, initial-scale = 1">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css">
    <link rel = "stylesheet"
         href = "https://fonts.googleapis.com/icon?family=Material+Icons">
    <script type = "text/javascript"
         src = "https://code.jquery.com/jquery-2.1.1.min.js"></script>
    <script>
      $(document).ready(function(){
        $('select').formSelect();
      });
    </script>
</head>


<body>
  <nav>
    <div class="nav-wrapper">
      <a href="#" class="brand-logo">Elb</a>
      <ul id="nav-mobile" class="right hide-on-med-and-down">
        <li><a href="/bulk_invoice_upload/">Invoice Upload</a></li>
        <li><a href="/bulk_inventory_upload/">Inventory Upload</a></li>
      </ul>
    </div>
  </nav>
  {% block content %}
  {% endblock %}
</body>

表格.html

{% extends 'main/header.html' %}
<body>
{% block content %}
<br>
<br>
<form method="POST">
    {% csrf_token %}
    <label for="invoice">Invoice</label>
    <select id="invoice" name="invoice">
        <option class=browser-default value="" disabled selected>Choose invoice</option>
        {% for invoice in invoices %}
        <option class=browser-default value="{{ invoice }}">{{ invoice }}</option>
        {% endfor %}
    </select>
    <br><br>
    <input type="submit" value="Save" />
</form>
{% endblock content %}
</body>

视图.py

def inventory_upload(request):
    if request.user.username == 'admin':  # Check that user is authorized
        if request.method == 'POST':  # Render HTML of results page returned to user
            ...do something and return to user...
        else:  # Initial html display to user
            invoices = Invoice.objects.all()
            inventory = get_inventory_from_sheet()
            form = BulkInventoryUpload
            return render(request=request,
                          template_name='form.html',
                          context={'invoices': invoices, 'inventory': inventory, 'form': form})
    else:  # Bounce user back to homepage if not authorized
        return redirect('main:homepage')

表单.py

from django import forms
from django.forms import formset_factory
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from .models import Invoice


class BulkInventoryUpload(forms.Form):
    invoice = forms.CharField(label='invoice', max_length=150)

    def get_invoice(self, commit=True):
        invoice = self.cleaned_data['invoice']
        return invoice
javascript html django forms materialize
1个回答
0
投票

对于任何其他人遇到同样的问题(归功于Sean Doherty在上面的评论中的答案)。

JQuery需要在CSS之前加载(从我的测试来看,似乎也是在JS之前)。

下面的命令让我成功了。

<head>
    {% load static %}

    <!-- Compiled and minified JavaScript -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>
    <script>
      $(document).ready(function(){
        $('select').formSelect();
      });
    </script>
    <!-- Compiled and minified CSS -->
    <meta name = "viewport" content = "width = device-width, initial-scale = 1">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css">
    <link rel = "stylesheet"
         href = "https://fonts.googleapis.com/icon?family=Material+Icons">
</head>
© www.soinside.com 2019 - 2024. All rights reserved.