工作中的 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' 添加到我的设置文件中,这使我可以看到未找到准确度变量。我可以知道我做错了什么吗?
任何建议将不胜感激!谢谢 :)