django-profile将变量传递给模板

时间:2012-01-24 15:45:07

标签: django django-templates django-profiles

Django新手在工作,我可以使用一些指针。我正在使用django-profile并且一直在处理我的个人资料页面,该页面由views.profile_detail处理。我面临的问题是我无法使用此视图在模板中添加另一个变量。这是我的视图功能:

def profile_detail(request, username, public_profile_field=None,
               template_name='profiles/profile_detail.html',
               extra_context=None):
"""
Detail view of a user's profile.

If no profile model has been specified in the
``AUTH_PROFILE_MODULE`` setting,
``django.contrib.auth.models.SiteProfileNotAvailable`` will be
raised.

If the user has not yet created a profile, ``Http404`` will be
raised.

**Required arguments:**

``username``
    The username of the user whose profile is being displayed.

**Optional arguments:**

``extra_context``
    A dictionary of variables to add to the template context. Any
    callable object in this dictionary will be called to produce
    the end result which appears in the context.

``public_profile_field``
    The name of a ``BooleanField`` on the profile model; if the
    value of that field on the user's profile is ``False``, the
    ``profile`` variable in the template will be ``None``. Use
    this feature to allow users to mark their profiles as not
    being publicly viewable.

    If this argument is not specified, it will be assumed that all
    users' profiles are publicly viewable.

``template_name``
    The name of the template to use for displaying the profile. If
    not specified, this will default to
    :template:`profiles/profile_detail.html`.

**Context:**

``profile``
    The user's profile, or ``None`` if the user's profile is not
    publicly viewable (see the description of
    ``public_profile_field`` above).

**Template:**

``template_name`` keyword argument or
:template:`profiles/profile_detail.html`.

"""
user = get_object_or_404(User, username=username)
# accuracy = ''
try:
    profile_obj = user.get_profile()
    accuracy = str(profile_obj.number_of_answers / profile_obj.number_of_answers) + '%'
except ObjectDoesNotExist:
    raise Http404
if public_profile_field is not None and \
   not getattr(profile_obj, public_profile_field):
    profile_obj = None

if extra_context is None:
    # extra_context = {'accuracy': potato}
    extra_context = {}
context = RequestContext(request)
# context['accuracy'] = 'potato'
for key, value in extra_context.items():
    context[key] = callable(value) and value() or value

return render_to_response(template_name,
                          {'profile': profile_obj},
                          # { 'profile': profile_obj, 'accuracy': accuracy},
                          # locals(),
                          context_instance=context)

这是我的模板:

{% extends "base.html" %}
{% load i18n %}

{% block content %}
<p><strong>Level:</strong><br>{{ profile.level }}</p>
<p><strong>Bounty Points:</strong><br>{{ profile.total_bounty_points }}</p>
<p><strong>Number of questions:</strong><br>{{ profile.number_of_questions_asked }}</p>
<p><strong>Number of replies:</strong><br>{{ profile.number_of_replies }}</p>
<p><strong>Number of answers:</strong><br>{{ profile.number_of_answers }}</p>
<p><strong>Accuracy:</strong><br>{{ accuracy }}</p>
<p><strong>Number of times reported:</strong><br>{{ profile.reported_by_others }}</p>

{% endblock %}

我可以知道值传递的位置在哪里吗?它来自字典{'profile':profile_obj}还是来自上下文?我试过评论两者,但模板仍然很好。

我还试图在我的模板中创建一个名为accuracy的新变量,但我无法将其渲染,模板只是静默失败。然后我将TEMPLATE_STRING_IF_INVALID ='%s'添加到我的设置文件中,这样我就可以看到找不到精度变量了。我可以知道我做错了吗?

任何建议都将不胜感激!谢谢:))

1 个答案:

答案 0 :(得分:0)

唉,我发现了这个问题!我正在更改错误的文件&gt; _&lt;因为我的python安装已写入默认目录。