Django Пользовательский шаблон тега и получение ПК из базы данных - PullRequest
0 голосов
/ 21 декабря 2011

У меня есть модель профиля пользователя с пользователем (ForeignKey) и user_timezone (CharField).На моей странице шаблона есть выпадающий список, который позволяет пользователю выбрать свой часовой пояс, отправить и все работает нормально.За исключением того факта, что я должен жесткий код ПК.Я не могу понять, как получить текущего пользователя?

import pytz
import datetime
import time
from pytz import timezone
from django import template
from django.contrib.auth.models import User
from turnover.models import UserProfile
from django.shortcuts import get_object_or_404

register = template.Library()

class TimeNode(template.Node):
    def __init__(self, format_string):
        self.format_string = format_string

    def render(self, context):
        # Get the user profile and their timezone
        profile = UserProfile.objects.get(pk=99) #<------ Hard Coded--
        set_user_timezone = profile.user_timezone

        # Set the Timezone
        dt = datetime.datetime.fromtimestamp(time.time(), pytz.utc)
        get_timezone = pytz.timezone(u'%s' % set_user_timezone)
        profile_timezone = get_timezone.normalize(dt.astimezone(get_timezone)).strftime(self.format_string)
        return profile_timezone

    @register.tag(name="current_time")
    def current_time(parser, token):
        tag_name, format_string = token.split_contents()
        return TimeNode(format_string[1:-1])

Ответы [ 2 ]

3 голосов
/ 21 декабря 2011
request = context.get('request')
user = request.user

Но вы должны иметь в настройках:

TEMPLATE_CONTEXT_PROCESSORS = (
    ...
    'django.core.context_processors.request',
    ...
)
0 голосов
/ 21 декабря 2011
class TimeNode(template.Node):
    def __init__(self, format_string, user):
        self.format_string = format_string
        self.user = template.Variable(user)

    def render(self, context):
        # Get the user profile and their timezone
        profile = UserProfile.objects.get(user=self.user) #<------ Hard Coded--
        set_user_timezone = profile.user_timezone

        # Set the Timezone
        dt = datetime.datetime.fromtimestamp(time.time(), pytz.utc)
        get_timezone = pytz.timezone(u'%s' % set_user_timezone)
        profile_timezone = get_timezone.normalize(dt.astimezone(get_timezone)).strftime(self.format_string)
        return profile_timezone

    @register.tag(name="current_time")
    def current_time(parser, token):
        tag_name, format_string, user = token.split_contents()
        return TimeNode(format_string[1:-1], user)

тогда вы можете сделать что-то вроде

{% current_time "timestring" request.user %}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...