猿问

如何在 Django 中对 URL 进行排序?由于网址放错位置,我收到“找不到页面”错误?

当我想添加项目或转到project_createURL 时,出现以下错误。


Page not found (404)

Request Method: GET

Request URL:    http://localhost:8000/project/add/

Raised by:  projects.views.project_detail_view

URL 表示/project/add/根据视图它必须打开project_create_view,但错误是由详细视图引发的projects.views.project_detail_view。


这是网址:


path('project/<slug:project_slug>/delete/',

     project_delete_view, name='project_delete'),

path('project/<slug:project_slug>/update/',

     project_update_view, name='project_update'),

path('project/<slug:project_slug>/',

     project_detail_view, name='project_detail'),

path('projects/list/', all_projects_view, name='all_projects'),

path('project/add/', project_create_view, name='project_create'),

path('administration/', administration, name='administration'),

path("", home, name='home'),

如果我评论这一行,path('project/<slug:project_slug>/',project_detail_view, name='project_detail'),则project_createURL 将转到右侧视图和右侧模板。为什么会发生这种情况?我使用了不同的name,url和view名称。为什么会发生这种情况?


编辑:我添加了两个视图


@login_required

def project_create_view(request):

    if not request.user.is_superuser:

        raise PermissionDenied


    if request.method == 'POST':

        form = ProjectForm(request.POST, request.FILES)

        if form.is_valid():

            title = form.instance.title

            form.save()

            project = get_object_or_404(Project, title=title)

            messages.success(request, 'Project created successfully.')

            return redirect(project.get_absolute_url())


    form = ProjectForm()


    return render(request, 'projects/project_create.html', {'form': form})



def project_detail_view(request, project_slug):

    project = get_object_or_404(Project, slug=project_slug)

    session_key = 'project_views{}'.format(project.slug)

    if not request.session.get(session_key, False):

        Project.objects.filter(id=project.pk).update(

            visit_count=F('visit_count') + 1

        )

        request.session[session_key] = True


    context = {

        'project': project

    }


    return render(request, 'projects/project_detail.html', context)


绝地无双
浏览 92回答 2
2回答

拉莫斯之舞

动态 URL 必须位于列表底部,urlpatterns = [                  # Fixed URLs                  path("", home, name='home'),                  path('administration/', administration, name='administration'),                  path('project/add/', project_create_view, name='project_create'),                  path('projects/list/', all_projects_view, name='all_projects'),                      # Dynamic URLs                  path('project/<slug:project_slug>/',                       project_detail_view, name='project_detail'),                  path('project/<slug:project_slug>/delete/',                       project_delete_view, name='project_delete'),                  path('project/<slug:project_slug>/update/',                       project_update_view, name='project_update'),              ] 

慕丝7291255

您可以按应用程序或路径排序,例如,如果您有多个以 开头的,project您可以将它们分组到不同的 url 模式列表中。projecturls =[&nbsp; &nbsp; # your project path urls]urlpatterns =[&nbsp; &nbsp; path('project/', include(projecturls)),&nbsp; &nbsp; # ...]
随时随地看视频慕课网APP

相关分类

Python
我要回答