Friday, September 10, 2010

Re: django-simple-freinds: template tags and Friendship request

Hi Preston thanks for your response but still having problem with
this:

views.py (full list below) passes:

extra_context['friendship_requests'] = {'incoming':
incoming_requests,
'outgoing':
outgoing_requests}

I have tried looping through this to extract from_user and to_user as
seperate variables but it doesnt work:

<ul>test for friendship_requests
{% for friendship_requests in friendsrequest_list %}
<li>{{ friendship_requests.incoming.from_user}}</li>
{% endfor %}
</ul>

although not producing an error it write out no data...

Could you suggest how to extract from_user and to_user variables.


My other question is regarding the templatetags (full listing add
bottom)

I think it works like this:
{% load friends_tags %}

{% add_to_friends target_user %}

it then redirects to _add_to.htmtl template, I'm not entirely sure
what I should have in this template: something like 'User1 was added
to your friends'

Thanks for your help

views

@login_required
def friend_list(request,
username=None,
paginate_by=None,
page=None,
allow_empty=True,
template_name='friends/friends_list.html',
extra_context=None,
template_object_name='friends'):
if username:
user = get_object_or_404(User, username=username)
else:
user = request.user
friends = Friendship.objects.friends_of(user)
if extra_context is None:
extra_context = {}
incoming_requests = FriendshipRequest.objects.filter(
to_user=request.user,
accepted=False)
outgoing_requests = FriendshipRequest.objects.filter(
from_user=request.user,
accepted=False)
extra_context['sender_user'] = request.user
extra_context['target_user'] = user
extra_context['friendship_requests'] = {'incoming':
incoming_requests,
'outgoing':
outgoing_requests}
extra_context['user_blocks'] =
request.user.user_blocks.blocks.all()
return object_list(request,
queryset=friends,
paginate_by=paginate_by,
page=page,
allow_empty=allow_empty,
template_name=template_name,
extra_context=extra_context,
template_object_name=template_object_name)

models
class FriendshipRequest(models.Model):
from_user = models.ForeignKey(User,
related_name="invitations_from")
to_user = models.ForeignKey(User, related_name="invitations_to")
message = models.CharField(max_length=200, blank=True)
created = models.DateTimeField(default=datetime.datetime.now,
editable=False)
accepted = models.BooleanField(default=False)

class Meta:
verbose_name = _(u'friendship request')
verbose_name_plural = _(u'friendship requests')
unique_together = (('to_user', 'from_user'),)

def __unicode__(self):
return _(u'%(from_user)s wants to be friends with %
(to_user)s') % \
{'from_user': unicode(self.from_user),
'to_user': unicode(self.to_user)}

def accept(self):
Friendship.objects.befriend(self.from_user, self.to_user)
self.accepted = True
self.save()
signals.friendship_accepted.send(sender=self)

def decline(self):
signals.friendship_declined.send(sender=self, cancelled=False)
self.delete()

def cancel(self):
signals.friendship_declined.send(sender=self, cancelled=True)
self.delete()

template tags
full version at : http://github.com/muhuk/django-simple-friends/blob/master/friends/templatetags/friends_tags.py

@register.tag
def add_to_friends(parser, token):
bits = token.split_contents()
tag_name, bits = bits[0], bits[1:]
if not bits:
raise template.TemplateSyntaxError(
'%s tag requires at least one argument' %
tag_name)
elif len(bits) > 3:
raise template.TemplateSyntaxError(
'%s tag takes at most three arguments' %
tag_name)
if len(bits) == 3:
if bits[2].startswith('"') and bits[2].endswith('"'):
bits[2] = bits[2][1:-1]
else:
raise template.TemplateSyntaxError(
'Third argument for %s tag must be a string' %
tag_name)
return AddToFriendsNode(*bits)


class AddToFriendsNode(template.Node):
def __init__(self, target_user, current_user='user',
template_name='friends/_add_to.html'):
self.target_user = template.Variable(target_user)
self.current_user = template.Variable(current_user)
self.template_name = template_name

def render(self, context):
target_user = self.target_user.resolve(context)
current_user = self.current_user.resolve(context)
if current_user.is_authenticated():
ctx = {'target_user': target_user,
'current_user': current_user}
if not target_user is current_user:
ctx['are_friends'] = Friendship.objects.are_friends(
target_user,
current_user)
ctx['is_invited'] =
bool(FriendshipRequest.objects.filter(

from_user=current_user,

to_user=target_user,

accepted=False).count())
return
template.loader.render_to_string(self.template_name,
ctx,
context)
else:
return u''

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to django-users+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/django-users?hl=en.

No comments:

Post a Comment