문제

현재 로그인 한 사용자를 얻는 코드가 있습니다.

userID = request.session.get("_auth_user_id")
    if userID:
        loggedin_user = User.objects.get(pk=int(userID))
    else:
        loggedin_user = None

사용자 이름이 모든 페이지에 표시되기를 원합니다.

현재 나는 모든보기에 코드를 넣고 모든 템플릿에 사용자 개체를 전달하고 있습니다.

return render_to_response('index.html', {loggedin_user})

이것은 Django의 건조한 윤리에 위배되는 것 같습니다. 나 자신을 반복하면서 어떻게 할 수 있습니까?

편집 : 아마도 사용자는 나쁜 예일 것입니다.

데이터베이스에서 객체 목록을 가져오고 싶다면 어떻게해야합니까?

items = Item.objects.all()

그리고 모든 페이지에 나열하십시오.

해당 코드를 작성하고 모든보기에서 목록을 템플릿으로 전달해야합니까? 아니면 모든 템플릿에서 해당 목록을 사용할 수 있도록 코드를 작성할 수 있습니까?

도움이 되었습니까?

해결책

당신은 a를 사용해야합니다 사용자 정의 템플릿 태그 그런 것. 사용자 정의 태그에서 필요한 데이터를 가져와 템플릿으로 보낼 수 있습니다. 당신이 기억해야 할 것은 당신이 그것을 사용할 템플릿 파일에 태그를로드하는 것입니다.

다른 팁

사용자 ID는 이미 세션 내에 존재합니다. 따라서 계속 전달할 필요는 없습니다.

{{ request.session._auth_user_id }}

작동하지만 설정 파일에서 Template_Context_Processors에 추가해야합니다.

django.core.context_processors.request

Render_To_Response에서는 요청을 매개 변수로 추가해야합니다. 예를 들어:

 return render_to_response('test.html',{}, context_instance=RequestContext(request))

request.user는 어떻습니까?

if request.user.is_authenticated():
    name = request.user.username
else:
    name = "Anonymous"

어쨌든, Django에서 아직 사용할 수 없다면 django.contrib.sessions.middleware.sessionmiddleware 또는 django.contrib.auth.middleware.authenticationmiddleware와 같은 미들웨어 클래스를 작성하는 것이 좋습니다. 해당 클래스는 요청 세부 사항이보기로 보내지기 전에 변경됩니다.

뷰마다 필요하다면, 작은 일을하기 위해 데코레이터를 작성하고 원하는보기를 @decorator 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top