Django форма не отображается в шаблоне - PullRequest
0 голосов
/ 30 марта 2020

В настоящее время я работаю над проектом, требующим Django форм, но у меня возникли некоторые проблемы. Моя форма не отображается вообще ... Поле не отображается в моем шаблоне.

Итак, мой код:

models.py

class Place(models.Model):
    name = models.CharField(max_length=255)
    longitudeMax = models.DecimalField(max_digits=8, decimal_places = 4 ,blank=True)
    longitudeMin = models.DecimalField(max_digits=8, decimal_places = 4, blank=True)
    latitudeMax = models.DecimalField(max_digits=8, decimal_places = 4, blank=True)
    latitudeMin = models.DecimalField(max_digits=8, decimal_places = 4, blank=True)
    datasetPath = models.CharField(max_length=255)
    isActive = models.BooleanField(default=True)


    def __str__(self):
        return self.name

    def get_place(self, name):
        return None

forms.py

class NewPlaceForm(forms.Form):
    name = forms.CharField(
        widget=forms.TextInput(
            attrs={
                "placeholder" : "Name",                
                "class": "form-control"
            }
        ))
    longMax = forms.DecimalField(
        widget=forms.NumberInput(
            attrs={
                "placeholder" : "Longitude Max",                
                "class": "form-control"
            }
        ))
    longMin = forms.DecimalField(
        widget=forms.NumberInput(
            attrs={
                "placeholder" : "Longitude Min",                
                "class": "form-control"
            }
        ))
    latMax = forms.DecimalField(
        widget=forms.NumberInput(
            attrs={
                "placeholder" : "Latitude Max",                
                "class": "form-control"
            }
        ))
    latMin = forms.DecimalField(
        widget=forms.NumberInput(
            attrs={
                "placeholder" : "Latitude Min",                
                "class": "form-control"
            }
        ))

    class Meta:
        model = Place
        fields = ('name', 'longitudeMax', 'longitudeMin', 'latitudeMax', 'latitudeMin')

views.py

def upload(request):
    msg = None

    if request.method == "POST":
        form = NewPlaceForm(request.POST)
        if form.is_valid():
            form.save()
            msg = 'Place created'
        else:
            msg = 'Form is not valid'    
    else:
        form = NewPlaceForm()
    return render(request, "pages/place_upload.html", {"form": form, "msg" : msg})

urls.py

from django.urls import path, re_path
from app import views

urlpatterns = [
    #Data modification page
    path('pages/place_modification.html', views.modification, name="place_modification"),

    #New place adding page
    path('pages/place_upload.html', views.upload, name="place_upload"),

    # Matches any html file 
    re_path(r'^.*\.html', views.pages, name='pages'),

    # The home page
    path('', views.index, name='home'),

]

html file

<form method="post" action="">
                        {% csrf_token %}
                        <div class="card-body">
                            <div class="row">
                                <div class="col-md-6 col-lg-4"> 

                                    <div class="form-group">
                                        <div class="input-group mb-3">
                                            <div class="input-group-prepend">
                                            </div>
                                            {{ form.name }}
                                        </div>
                                    </div>                      
                                </div>
                            </div>
                            <div class="row">
                                <div class="col-md-6 col-lg-4">
                                    <div class="form-group">
                                        <div class="input-group mb-3">
                                            <div class="input-group-prepend">
                                            </div>
                                            {{ form.longMax }}
                                        </div>
                                    </div>
                                    <div class="input-group mb-3">
                                            <div class="input-group-prepend">
                                            </div>
                                            {{ form.longMin }}
                                    </div>
                                </div >
                                <div class="col-md-6 col-lg-4">
                                    <div class="input-group mb-3">
                                            <div class="input-group-prepend">
                                            </div>
                                            {{ form.latMax }}
                                    </div>
                                    <div class="input-group mb-3">
                                            <div class="input-group-prepend">
                                            </div>
                                            {{ form.latMin }}
                                    </div>
                                </div>
                                <div class="col-md-6 col-lg-4">
                                    <div class="form-group form-floating-label">
                                        <small id="emailHelp2" class="form-text text-muted">Use negative numbers for South and positive numbers for North</small>
                                    </div>
                                    <div class="form-group form-floating-label">
                                        <small id="emailHelp2" class="form-text text-muted">Use negative numbers for West and positive numbers for East</small>

                                    </div>
                                </div>
                            </div>
                        </div>
                        <div class="card-action">
                            <button type="submit" class="btn btn-success">Submit</button>
                            <button class="btn btn-danger">Cancel</button>
                        </div>
                    </form>

Я не понимаю, почему это не работает, и вот уже несколько дней я пытаюсь заставить его работать ... . Я сделал что-то неправильно ? Я что-то забыл? Потому что я не чувствую, как я, и это действует мне на нервы ахаха

1 Ответ

0 голосов
/ 30 марта 2020

Django обрабатывает рендеринг формы из коробки, чтобы отобразить базовую c форму, попробуйте:

  <form method="POST" action="{% url 'namespaced:url' %}">
    { csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="submit">
  </form>

Тем не менее, похоже, что вы используете bootstrap в своем шаблон, вы можете найти пакет django-bootstrap4 полезным (https://github.com/zostera/django-bootstrap4).

Быстрый пример:

pip install django-bootstrap4

и добавить bootstrap4 в ваши установленные приложения.

Затем в вашем шаблоне:

{% load bootstrap4 %}

{# Load CSS and JavaScript #}
{% bootstrap_css %}
{% bootstrap_javascript jquery='full' %}



<form action="{% url 'namespaced:url' %}" method="post" class="form">
  {% csrf_token %}
  {% bootstrap_form form %}
  {% buttons %}
    <button type="submit" class="btn btn-primary">
      Submit
    </button>
  {% endbuttons %}
</form>

Если вы хотите, вы можете визуализировать каждое поле вручную, используя: {% bootstrap_field field %}, так что вы можете делать что-то вроде <div class="col-md-6">{% bootstrap_field my_field %}</div>, чтобы вручную расположить поля формы на странице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...