【问题标题】:Django is not showing the right path when clicking on a link单击链接时,Django 未显示正确的路径
【发布时间】:2018-07-26 18:36:09
【问题描述】:

这是点击链接时显示的内容

找不到页面 (404)

请求方法:GET 请求 URL: http://localhost:8000/jobapplication/new/1

使用 careal.urls 中定义的 URLconf,Django 尝试了这些 URL 模式,按以下顺序:

^$ [name='landing-index']

^管理员/

^帐户/

^任务管理器/

^login/$ [name='login']

  • 问题是我不知道为什么它以http://localhost:8000/jobapplication/new/1打开链接,什么时候应该是http://localhost:8000/taskmanager/jobapplication/new/1

  • 这就是我在 urls.py 中的内容

    from django.conf.urls import include, url
        from django.contrib import admin
        from django.conf import settings
        from django.contrib.auth import views as auth_views
        from landingpage import views as landingpage_views
    
    urlpatterns = [
            url(r'^$', landingpage_views.index, name='landing-index'),
            url(r'^admin/', admin.site.urls),
            url(r'^accounts/', include('allauth.urls')),
            url(r'^taskmanager/', include('taskmanager.urls')),
            url(r'^login/$', auth_views.login, name='login'),
    ]
    
  • 这是在应用任务管理器的 urls.py 中

    from django.conf.urls import url
    from . import views
    from taskmanager.views import *
    
    app_name = 'taskmanager'
    urlpatterns = [
     # Task manager urls
       url(r'^$', JobApplicationIndex.as_view(), name='index'),
       url(r'jobapplication/add/(?P<jobpost_id>[0-9]+)/$', JobApplicationCreate.as_view(), name='jobapplication-add'),
       url(r'jobapplication/new/(?P<jobpost_id>[0-9]+)/$', views.JobApplicationAdd, name='jobapplication-new'),
       url(r'jobapplication/edit/(?P<jobpost_id>[0-9]+)/$', views.JobApplicationEdit, name='jobapplication-edit'),
      url(r'jobapplication/edit/(?P<pk>[0-9]+)/$', JobApplicationUpdate.as_view(), name='jobapplication-edit'),
      url(r'^jobapplication/(?P<pk>[0-9]+)/$', JobApplicationDetails.as_view(), name='jobapplication-detail'),
    
    # Company urls
    url(r'company/$', CompanyIndex.as_view(), name='company-index'),
    url(r'company/add/$', CompanyCreate.as_view(), name='company-add'),
    url(r'^company/(?P<pk>[0-9]+)/$', CompanyDetails.as_view(), name='company-detail'),
    
    # Job Post urls
    url(r'jobpost/$', JobPostIndex.as_view(), name='jobpost-index'),
    url(r'^jobpost/(?P<pk>[0-9]+)/$', JobPostDetails.as_view(), name='jobpost-detail'),
    
    # Statistics urls
    url(r'^kpi/$', views.kpi, name='kpi'),
    ]
    
  • 这就是我在taskmanager中views.py中的内容,与jobapplication相关

    # Job Application views
    class JobApplicationIndex(generic.ListView):
    template_name = 'taskmanager/jobapplication_index.html'
    
    def get_queryset(self):
        if self.request.user.is_authenticated:
            return   JobApplication.objects.filter(user=self.request.user.id).order_by('-created_at')
    
    
    class JobApplicationCreate(CreateView):
    model = JobApplication
    fields = ['jobpost', 'sent_date', 'deadline', 'success_rate']
    
    def get_initial(self):
        jobpost = get_object_or_404(JobPost,  id=self.kwargs.get('jobpost_id'))
        return {
            'jobpost':jobpost,
        }
    
    def form_valid(self, form):
        form.instance.user = self.request.user
        return super(JobApplicationCreate, self).form_valid(form)
    
    class JobApplicationDetails(generic.DetailView):
    model = JobApplication
    
    class JobApplicationEdit(UpdateView):
    model = JobApplication
    #fields = ['jobpostid', 'is_favorite']
    #p = JobApplication.objects.get(id=jobpostid)
    #p.is_favorite = is_favorite
    #p.save()
    
    
    class JobApplicationUpdate(UpdateView):
    model = JobApplication
    fields = ['sent_date', 'deadline', 'success_rate']
    template_name_suffix = '_update_form'
    
    
    def JobApplicationAdd(request, jobpost_id):
     if request.method == 'GET' and request.user.is_authenticated:
        # If job app for this id exists, redirect to that job app page with a message
        if JobApplication.objects.filter(jobpost_id=int(jobpost_id)).exists():
            existing = JobApplication.objects.get(jobpost_id=int(jobpost_id))
            messages.add_message(request, messages.INFO, 'An application for this opening already exists.')
            return HttpResponseRedirect(reverse('taskmanager:jobapplication-detail', args=[existing.id]))
    
        jobapp = JobApplication(user=request.user, jobpost_id=int(jobpost_id), success_rate=50)
        jobapp.save()
    
    return HttpResponseRedirect(reverse('taskmanager:index'))
    

---问题是taskmanager中的所有其他链接都在工作,当您单击它们时,会打开正确的路径例如:-

  - http://localhost:8000/taskmanager/jobpost/
  - http://localhost:8000/taskmanager/jobpost/2/
  - http://localhost:8000/taskmanager/company/2/
  - http://localhost:8000/taskmanager/kpi/

【问题讨论】:

    标签: django url http-status-code-404


    【解决方案1】:

    尝试在正则表达式模式前添加一个上升趋势,就像你为那些正在工作的模式所做的那样。

    from django.conf.urls import url
    from . import views
    from taskmanager.views import *
    
    app_name = 'taskmanager'
    urlpatterns = [
        # Task manager urls
        url(r'^$', JobApplicationIndex.as_view(), name='index'),
        url(r'^jobapplication/add/(?P<jobpost_id>[0-9]+)/$', JobApplicationCreate.as_view(), name='jobapplication-add'),
        url(r'^jobapplication/new/(?P<jobpost_id>[0-9]+)/$', views.JobApplicationAdd, name='jobapplication-new'),
        url(r'^jobapplication/edit/(?P<jobpost_id>[0-9]+)/$', views.JobApplicationEdit, name='jobapplication-edit'),
        url(r'^jobapplication/edit/(?P<pk>[0-9]+)/$', JobApplicationUpdate.as_view(), name='jobapplication-edit'),
        url(r'^jobapplication/(?P<pk>[0-9]+)/$', JobApplicationDetails.as_view(), name='jobapplication-detail'),
    
        # Company urls
        url(r'^company/$', CompanyIndex.as_view(), name='company-index'),
        url(r'^company/add/$', CompanyCreate.as_view(), name='company-add'),
        url(r'^company/(?P<pk>[0-9]+)/$', CompanyDetails.as_view(), name='company-detail'),
    
        # Job Post urls
        url(r'^jobpost/$', JobPostIndex.as_view(), name='jobpost-index'),
        url(r'^jobpost/(?P<pk>[0-9]+)/$', JobPostDetails.as_view(), name='jobpost-detail'),
    
        # Statistics urls
        url(r'^kpi/$', views.kpi, name='kpi'),
    ]
    

    【讨论】:

    • 谢谢,我之前已经尝试过了,但结果还是一样。
    猜你喜欢
    • 2013-02-12
    • 1970-01-01
    • 2020-02-11
    • 2011-11-11
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多