Django не может заставить страницу с формой загрузиться в браузере 404
Я установил свой LAMP с Ubuntu и MariaDB. Код Django смог создать для меня несколько таблиц в базе данных, но я просто получаю 404, когда пытаюсь загрузить свою форму в браузере через URLS http://127.0.0.1/create_unit
или http://127.0.0.1/vcm/create_unit
Возможно, мой urls.py неправильный. Может быть, дело в моем settings.py. Я пробовал всевозможные вещи, так что мой код, вероятно, немного исказился.
Из TEMPLATES в settings.py я жестко закодировал путь к моему .html Я много экспериментировал с этим.
'DIRS': [ '/opt/vcm_project/vcm/templates/vcm' ],
urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
path('create_unit', views.create_unit, name='create_unit'),
]
models.py
from django.db import models
# Create your models here.
class Unit(models.Model):
unit_code = models.CharField(max_length=15)
unit_name = models.CharField(max_length=255)
unit_sector = models.CharField(max_length=255)
unit_application = models.TextField(max_length=65535)
unit_url = models.URLField(max_length=255)
superseded_equivalent = models.CharField(max_length=15)
def __str__(self):
return self.unit_name
class Element(models.Model):
element_number = models.CharField(max_length=100)
element_name = models.CharField(max_length=255)
def __str__(self):
return self.element_name
forms.py
from django import forms
from .models import Unit
class UnitForm(forms.ModelForm):
class Meta:
model = Unit
fields = ('unit_code', 'unit_name', 'unit_sector', 'unit_application', 'unit_url', 'superseded_equivalent')
widgets = {
'unit_code': forms.CharField(label='Unit code', max_length=15)
'unit_name': forms.CharField(label='Unit name', max_length=255)
'unit_sector': forms.CharField(label='Unit sector', max_length=255)
'unit_application': forms.CharField(label='Unit application', max_length=65535)
'unit_url': forms.URLField(label='Unit URL', max_length=255)
'superseded_equivalent': forms.CharField(label='Superseded equivalent', max_length=15)
}
views.py
from django.http import HttpResponseRedirect
from django.shortcuts import render
from .models import Unit
from django.views.generic.edit import CreateView, UpdateView
def index(request):
return HttpResponse("Hello, world. You're at the vcm index.")
def create_unit(request):
if request.method == 'POST':
# create a form instance and populate it with data from the request:
form = UnitForm(request.POST)
# check whether it's valid:
if form.is_valid():
# process the data in form.cleaned_data as required
form.save()
# redirect to a new URL:
return HttpResponseRedirect('/thanks/')
# if a GET (or any other method) we'll create a blank form
else:
form = UnitForm()
return render(request, 'vcm/create_unit.html', {'form': form})
Мой HTML здесь
/opt/vcm_project/vcm/templates/vcm/create_unit.html
create_unit.html
<form action="{% url 'create_unit' %}" method="POST">
{% csrf_token %}
{{ form }}
<input type="submit" value="Submit"/>
</form>
admin.py
from django.contrib import admin
# Register your models here.
from .models import Unit
admin.site.register(Unit)
from .models import Element
admin.site.register(Element)