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' %}.

Вернуться на верх