2012-01-24 5 views
0

Django newbie au travail et je pourrais utiliser quelques pointeurs. J'utilise django-profile et j'ai travaillé sur ma page de profil qui est gérée par views.profile_detail. Le problème auquel je suis confronté est que je suis incapable de mettre une autre variable dans mon modèle en utilisant cette vue. Voici ma fonction de vue:django-profile passant des variables au modèle

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) 

et voici mon modèle:

{% 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 %} 

Puis-je savoir où le profil de valeur est passée de? Est-ce à partir du dictionnaire {'profile': profile_obj} ou est-ce du contexte? J'ai essayé de commenter les deux, mais le modèle reste très bien.

J'ai également essayé de créer une nouvelle variable appelée précision dans mon modèle mais je n'arrive pas à l'obtenir et le modèle échoue simplement silencieusement. J'ai ensuite ajouté TEMPLATE_STRING_IF_INVALID = '% s' à mon fichier de paramètres, ce qui m'a permis de voir que la variable de précision n'est pas trouvée. Puis-je savoir ce que j'ai fait de mal?

Un conseil serait grandement apprécié! Merci :)

+0

Je ne suis pas sûr de ce que vous demandez. Si c'est la vue de l'application tierce, vous ne devriez pas la modifier vous-même - le point entier de l'argument 'extra_context' est que vous pouvez passer des valeurs supplémentaires à partir de l'urlconf, qui est la façon dont vous passeriez tout' précision »est censé être. –

+0

@DanielRoseman Merci pour le commentaire et je comprends totalement ce que tu veux dire :) J'ai essayé cette URL (r '^ (? P \ w +)/$', views.profile_detail, extra_context = {'exactitude': 'pomme de terre' }, name = 'profiles_profile_detail'), Cela signifie-t-il que je devrais pouvoir utiliser la variable {{accuracy}} directement, car cela ne semble pas fonctionner. Merci encore! – nightscent

Répondre

0

Argh J'ai trouvé le problème! Je changeais le mauvais fichier> _ < pendant que mon installation de python avait écrit dans le répertoire par défaut.

Questions connexes