2013-01-20 12 views
6

मैं वर्तमान में लॉग इन उपयोगकर्ता को पकड़ने और हर दृश्य के शीर्ष पर प्रदर्शित करने की कोशिश कर रहा हूं। मैंने इसके लिए सभी जगहों की खोज की है, लेकिन मुझे कभी भी मेरी समस्या का सीधा जवाब नहीं मिल रहा है।Django क्लास व्यू के साथ वर्तमान लॉग इन उपयोगकर्ता को पकड़ना?

मैं इसे फॉर्म व्यू में प्राप्त करने में सक्षम था, लेकिन किसी कारण से मैं इसे सामान्य दृश्य में प्रदर्शित नहीं कर सकता। यह मुझे पागल कर रहा है।

from django.http import HttpResponse, Http404 
from django.views.generic import ListView, DetailView, FormView 
from django.template import RequestContext, loader, Context 
from django.core.urlresolvers import reverse 
from boards.models import Links, LinksCreateForm, Category 
from django.contrib.auth.models import User 


def get_user(request): 
    current_user = request.get.user 
    return current_user 


class LinksListView(ListView): 
    model = Links 


class LinksDetailView(DetailView): 
    model = Links 


class LinksCreateView(FormView): 
    template_name = 'boards/link_create.html' 
    form_class = LinksCreateForm 

    def form_valid(self, form): 
     name = form.cleaned_data['name'] 
     description = form.cleaned_data['description'] 
     user = self.request.user 
     category = Category.objects.get(id=form.cleaned_data['category'].id) 
     link = Links(name=name, description=description, user=user, category=category) 
     link.save() 
     self.success_url = '/boards/' 

     return super(LinksCreateView, self).form_valid(form) 

उत्तर

8

अपने सामान्य दृश्य कार्यान्वयन में आप get_context_data

def get_context_data(self, **kwargs): 
# Call the base implementation first to get a context 
     c = super(ReqListView, self).get_context_data(**kwargs) 
     user = self.request.user 
     return c 

का विस्तार करने की आवश्यकता होगी तो यह अपनी आवश्यकताओं को आप क्या चाहते हैं पर निर्भर करता है इसके साथ करने के लिए।

Extending generic view classes for common get_context_data

+0

सही काम किया, धन्यवाद। –

+0

कि समाधान वास्तव में django-ish नहीं है। जवाब sneawo जवाब देखें। – migajek

+1

वैसे सवाल ने उपयोगकर्ता को देखने के लिए पूछा, टेम्पलेट में नहीं। Sneawo का जवाब अन्यथा सही है। –

5

आपके विचार के भीतर, आप अनुरोध करने के लिए उपयोग (और इसलिए उपयोगकर्ता) है:

self.request.user 

चूंकि आप एक 'दृश्य' के शीर्ष पर यह प्रदर्शित करने के बारे में बात कर रहे हैं, मैं आपको लगता है कि टेम्पलेट में इसका उपयोग करना चाहते हैं।

आप के रूप में अपने टेम्पलेट में इसे उपयोग करने में सक्षम होना चाहिए:

{{ request.user }} 
+0

सबसे आसान जवाब यहाँ। – Zeretil

6

आप settings.py में TEMPLATE_CONTEXT_PROCESSORS को 'django.core.context_processors.request' जोड़ सकते हैं और उसके बाद {{ request.user }} के रूप में वर्तमान उपयोगकर्ता का उपयोग।

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.contrib.auth.context_processors.auth', 
    'django.core.context_processors.request', 
    'django.core.context_processors.debug', 
    'django.core.context_processors.i18n', 
    'django.core.context_processors.media', 
    'django.core.context_processors.static', 
    'django.core.context_processors.tz', 
    'django.contrib.messages.context_processors.messages' 
) 

https://docs.djangoproject.com/en/1.4/ref/settings/#std:setting-TEMPLATE_CONTEXT_PROCESSORS

0

टेम्पलेट संदर्भ प्रोसेसर को जोड़ने @sneawo उठाई के रूप में जाने के लिए सबसे अच्छा तरीका है: यदि आप नहीं इस चर है, तो आप इसे के रूप में जोड़ सकते हैं। हालांकि, मैं डिफ़ॉल्ट को ओवरराइड नहीं करना पसंद करता हूं, लेकिन का विस्तार करता है। इस तरह:

from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS as TCP 
# ... 
TEMPLATE_CONTEXT_PROCESSORS = TCP + (
    'django.core.context_processors.request', 
) 

क्यों? क्योंकि django में डिफ़ॉल्ट संदर्भ प्रोसेसर की सूची संस्करण से संस्करण में बदल जाती है। कुछ अंतर्निर्मित/contipped (contrib) पुस्तकालय डिफ़ॉल्ट सेटिंग्स पर निर्भर करते हैं। आम तौर पर, मेरा मानना ​​है कि जब तक आपको करना नहीं है तब तक डिफ़ॉल्ट को ओवरराइड करना बेहतर नहीं है।

संबंधित मुद्दे