Django маршрутизация/путь к размножению приложений

Здравствуйте, я знаю, что здесь много вопросов о маршрутизации из veiw в новое приложение в django. Я просмотрел многие из них. И понял, что использование app_name = 'name' и использование именованных маршрутов для моих html шаблонов делает все проще. Когда я пытаюсь использовать app_name:named-route я получаю следующее :

ValueError at /recipedashboard Представление recipeApp.views.dashboard не вернуло объект HttpResponse. Вместо этого оно вернуло None.

Я добился того, что name_app:named-route отправляет меня во второе приложение, но как мне передать сессию новому приложению?

userApp veiws:

from django.shortcuts import render, redirect
from django.contrib import messages
from .models import User as LoggedUser

# Create your views here.

def index(request):
    return render(request, 'index.html')

def register(request):
    if request.method == "GET":
        return redirect('/')
    errors = LoggedUser.objects.validate(request.POST)
    if len(errors) > 0:
        for er in errors.values():
            messages.error(request, er)
        return redirect('/')
    else:
        new_user = LoggedUser.objects.register(request.POST)
        request.session['user_id'] = new_user.id
        messages.success(request, "You have successfully registered")
        return redirect('/success')

def login(request):
    if request.method == "GET":
        return redirect('/')
    if not LoggedUser.objects.authenticate(request.POST['email'],
        request.POST['password']):
        messages.error(request, "Invalid Email/Password")
        return redirect('/')
    user = LoggedUser.objects.get(email=request.POST['email'])
    request.session['user_id'] = user.id
    messages.success(request, "You have successfully logged in!")
    return redirect('/success')

def logout(request):
    request.session.clear()
    return redirect('/')

def success(request):
    if 'user_id' not in request.session:
        return redirect('/')
    context = {
        'user' : LoggedUser.objects.get(id=request.session['user_id'])
    }
    return redirect("recipe:recipe-dashboard")

recipeApp urls.py:

from django.urls import path
from . import views as recipeViews
app_name ='recipe'


urlpatterns = [
    path('dashboard', recipeViews.dashboard, name= "recipe-dashboard" )
] 

recipeApp.Views :

from django.shortcuts import render, redirect
from userApp.models import User as LoggedUser

# Create your views here.
def dashboard(request):
    if 'user_id' not in request.session:
        return redirect('/')
    user = LoggedUser.objects.get(id=request.session['user_id'])
    context = {
        'user' : user
    }
    render (request, 'dashboard.html', context)

Ваше представление dashboard ничего не возвращает.

Вам нужно вернуть результаты рендеринга. Например

from django.shortcuts import render, redirect
from userApp.models import User as LoggedUser

# Create your views here.
def dashboard(request):
    if 'user_id' not in request.session:
        return redirect('/')
    user = LoggedUser.objects.get(id=request.session['user_id'])
    context = {
        'user' : user
    }
    return render (request, 'dashboard.html', context)

Нет необходимости передавать сессию. Фреймворк сделает это за вас, если все приложения находятся в одном проекте.

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