URL не проснулся в Джанго - PullRequest
       44

URL не проснулся в Джанго

2 голосов
/ 22 сентября 2019

У меня вопрос в два раза, оба вращаются вокруг ошибки NoReverseMatch. Первый вопрос : Я получаю ошибку NoReverseMatch каждый раз, когда я вызываю свой URL ( {% url 'dashboard' client.pk%} ) на других страницах, которые используют другое представление (например, DashboardPilot : , пожалуйста, проверьте URL ), но когда я использую его в dashboard.html , он отлично работает.

Views.py

class Dashboard(LoginRequiredMixin, UserPassesTestMixin, DetailView):
    model = ClientProfile
    template_name ='accounts/dashboard.html'
    context_object_name= 'client'
    login_url= 'login'
    fields = '__all__'
    def test_func(self):
            return self.request.user.role == 'client'

urls.py

urlpatterns =[
    path('accounts/dashboard/client/<int:pk>', Dashboard.as_view(), name='dashboard'),
    path('accounts/dashboard/pilot/<int:pk>', DashboardPilot.as_view(), name='pilot_dashboard'),
    path('jobs', JobPage.as_view(), name='job_page'),
    path('job/<int:pk>/details', JobDetails.as_view(), name='job_details'),
    path('accounts/edit/job/<int:pk>', EditJob.as_view(), name='job_edit'),
]

**models.py**

 class ClientProfile(models.Model):
   username = models.ForeignKey(User, on_delete= models.CASCADE)
   client_firstname=models.CharField(max_length=200)
   client_lastname=models.CharField(max_length =150)
   role =models.CharField(max_length =150)
   client_phone_no=models.CharField(max_length =150)
   client_email=models.EmailField(max_length=150)

Вторые вопросы: у меня есть представление, которое перенаправляет на панель управления (использует pk) после подписания, но каждый раз я получаю сообщение об ошибкеон пытается перенаправить на панель управления.

views.py

def signin (request):
  if request.method == 'POST':
    username = request.POST['username']
    password = request.POST['password']

    user = auth.authenticate(username=username, password=password)

    if user is not None:
        auth.login(request,user)
        messages.success(request, 'You are now logged in')
        if user.role == 'client':
            return redirect ('dashboard')
        else:
            return redirect ('pilot_dashboard')
    else:
        messages.error(request, 'Invalid Credentials')
        return redirect ('login')

  else:
    return render (request, 'accounts/signin.html')

urls.py

 urlpatterns =[
    path('accounts/dashboard/client/<int:pk>', Dashboard.as_view(), name='dashboard'),
    path('accounts/dashboard/pilot/<int:pk>', DashboardPilot.as_view(), name='pilot_dashboard'),
    path('jobs', JobPage.as_view(), name='job_page'),
    path('job/<int:pk>/details', JobDetails.as_view(), name='job_details'),
    path('accounts/edit/job/<int:pk>', EditJob.as_view(), name='job_edit'),
]

Iя пытался использовать return redirect (reverse ('dashboard', args = [str (self.id)])) * , но я продолжаю получать самоопределение не определено. Буду безмерно благодарен за любую оказанную помощь .

1 Ответ

0 голосов
/ 22 сентября 2019

Для первой проблемы, пожалуйста, убедитесь, что в шаблоне присутствует объект client.Скорее всего, у вашего шаблона нет объекта client, поэтому URL не разрешен.Вы можете проверить это, включив {{ client }} в шаблоны, которые выдают ошибку.В основном вам нужно передать правильный объект внутри тега шаблона url.

Вы можете добавить объект client в контекст, если у вашего представления нет ClientProfile в контексте вашего шаблона.

Для второй проблемы вызовите reverse с ключевым словом kwargs.Кроме того, вы не передаете правильное значение для разрешения URL.

Использование:

return redirect(reverse('dashboard', kwargs={"pk": user.clientprofile.id}))

...