Django URL mapping Error : Используя URLconf, определенный в proctor.urls (т.е. project.urls), Django попробовал эти шаблоны URL в таком порядке:
В принципе, мой проект состоит из трех приложений: 1.logreg (для входа/регистрации) 2.usersite 3.adminsite Поскольку я новичок, я просто тестирую код только для таблицы допуска, которая находится в приложении usersite. Таблица приема Когда я пытаюсь перейти на следующую страницу после заполнения данных таблицы приема через форму. Я получаю ошибку следующего вида:
Using the URLconf defined in proctor.urls, Django tried these URL patterns, in this order:
[name='login']
login [name='login']
registration [name='registration']
logout [name='logout']
usersite
adminsite
admin
The current path, submit_admission/, didn’t match any of these.
Это urls.py моего проекта proctor
from xml.etree.ElementInclude import include
from django.contrib import admin
from django.urls import path,include
#from usersite.views import admission,submit_admission
urlpatterns = [
path('',include('logreg.urls')),
path('usersite',include('usersite.urls')),
path('adminsite',include('adminsite.urls')),
path('admin', admin.site.urls),
#path('submit_admission/', submit_admission, name='submit_admission'),
]
Это urls.py приложения usersite
from django.urls import path
from.import views
from django.contrib.auth import views as auth_views
from usersite.views import submit_admission
urlpatterns = [
#path('', views.admission, name='admission'),
path('', views.admission, name='admission'),
path('submit_admission/', submit_admission, name='submit_admission'),
path('academicdetails', views.academic, name='academic'),
path('achievementdetails', views.achievements, name='achievements'),
path('personalinfodetails', views.personalinfo, name='personalinfo'),
path('unauth', views.unauthorised, name='unauth'),
path('logout', views.logout_view, name='logout'),
path('logreg/login/', auth_views.LoginView.as_view()),
]
Это views.py приложения usersite
.
Игнорируйте код после def submit_admission(request):
from django.http import HttpResponse
from django.shortcuts import render, redirect
from django.http import HttpResponse
from django.contrib.auth import logout
from django.contrib.auth.models import User
from django.conf import settings
from django.shortcuts import redirect
from django.contrib.auth import logout
from django.contrib.auth.decorators import login_required
from usersite.forms import admission1
@login_required(login_url='logreg/login')
@login_required
def admission(request):
if not request.user.is_authenticated:
return redirect('unauthorised')
else:
form = admission1()
return render(request,'admission.html', context={'form': form})
@login_required
def submit_admission(request):
if request.user.is_authenticated:
user = request.user
print(user)
form = admission1(request.POST)
if form.is_valid():
print(form.cleaned_data)
return redirect("admission")
else:
return render(request,'admission.html',context = {'form': form})
@login_required
def academic(request):
if not request.user.is_authenticated:
return redirect('unauthorised')
else:
return render(request,'academic.html')
@login_required
def achievements(request):
if not request.user.is_authenticated:
return redirect('unauthorised')
else:
return render(request,'achievements.html')
@login_required
def personalinfo(request):
if not request.user.is_authenticated:
return redirect('unauthorised')
else:
return render(request,'personalinfo.html')
@login_required
def logout_view(request):
logout(request)
return render(request,'logout.html')
def unauthorised(request):
return render(request,'unauthorised.html')
У меня приложение записано в INSTALLED_APPS, который находится в settings.py проекта
this is installed apps
INSTALLED_APPS = [
# logreg app
'logreg.apps.LogregConfig',
# crispy forms
'crispy_forms',
'adminsite.apps.AdminsiteConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'usersite',
]
Это models.py приложения usersite
from django.db import models
from django.contrib.auth.models import User
class admission1(models.Model):
year = models.CharField(max_length=45, blank=True, null=True)
category = models.CharField(max_length=45, blank=True, null=True)
hsc = models.CharField(max_length=45, blank=True, null=True)
cet = models.CharField(max_length=45, blank=True, null=True)
jee = models.CharField(max_length=45, blank=True, null=True)
diploma = models.CharField(max_length=45, blank=True, null=True)
user = models.ForeignKey(User, on_delete=models.CASCADE)
Это forms.py приложения usersite
from django.forms import ModelForm
from usersite.models import admission1
class admission1(ModelForm):
class Meta:
model = admission1
fields = ['year','category','hsc','cet','jee','diploma']
У меня есть тег формы в файле admission.html вот так
.
Не привожу полный html-код, чтобы использовать меньше места
<form action="/submit_admission/" method="post">
{% csrf_token %}
<h4 style="padding-top: 20px; text-align: center; text-transform:uppercase;"> Department of</h4>
</form>
Я попробовал добавить url submit_admission в urls.py проекта(proctor) и, к счастью, это сработало. Но это не правильный способ, я думаю. url каждого действия должен быть в urls.py соответствующих приложений, что является лучшей практикой. Кто-нибудь может помочь мне с этой проблемой. Я хочу, чтобы действие submit_admission отображалось в urls.py приложения usersite. Я не знаю, какую ошибку я делаю.
Поскольку вы использовали конфигурацию root url, где вы добавляете префикс пути к каждому приложению (например, usersite, adminsite) и часть, которая вам нужна, submit-admission может быть найдена в части usersite вашего проекта, url /submit_admission/ не существует. Вам понадобится /usersite/submit_admission.
В Django наиболее распространенный способ сделать это - позволить Django самому создавать урлы. Вы можете просто добавить туда имя, например, так:
<form action="{% url 'submit_admission' %}" method="post">
{% csrf_token %}
<h4 style="padding-top: 20px; text-align: center; text-transform:uppercase;"> Department of</h4>
</form>
Возможно, это может быть так: {% url 'usersite:submit_admission' %}.