Ali
Ali

Reputation: 25

How to display twitter feeds based on users in django & tweepy?

I want to show twitter data based on twitter username in my template (Tweepy) but I don't know how to send data from my models into my views.

The content of models.py is:

<pre>
from django.db import models
from django.conf import settings    

User = settings.AUTH_USER_MODEL
# Create your models here.
class Feed(models.Model):
    owner             = models.ForeignKey(User, on_delete=models.CASCADE)
    feed              = models.CharField(max_length=211, blank=True, null=True)
    twitter           = models.CharField(max_length=211, blank=True, null=True) # this is the twitter username which the user can enter and be sent to the views to api.get_user(twitter)

    def __str__(self):
        return self.feed
</pre>

The content of views.py is:

<pre>
from django.shortcuts import render
from django.views.generic import TemplateView

from .tweet import *
from .models import Feed


def feed(request):
    api = tweepyapi(request)
    user = api.get_user(twitter) # I want this portion to be dynamic.
    findfriends = user.friends()
    return render(request, 'feeds/feeds.html', {
        'user': user,
        'findfriends': findfriends
    })

</pre> 

Upvotes: 0

Views: 806

Answers (1)

Sumeet Kumar
Sumeet Kumar

Reputation: 1019

let's say you have Profile model related to User model via one-to-one relation

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="profile")
    twitter_username = models.CharField(max_length=40, blank=True)

    def get_absolute_url(self):
        context = {
            'id':self.id,
            }
    return reverse("viewprofile", kwargs=context)

and in your template, we provide a link to user's profile as

{% for user in user_list %}
<a href="{% user.profile.get_absolute_url %}">{{ user.get_full_name }}</a>
{% endfor %}

now assuming you are passing id of user in get_absolute_url, your url will look like

url(r'^(?P<id>[0-9]+)/$', views.feed, name="viewprofile")

and then in your view

def feed(request,id):
    profile = get_object_or_404(UserProfile,user__id=id )
    api = tweepyapi(request)
    user = api.get_user(profile.twitter_username)
    findfriends = user.friends()
    return render(request, 'feeds/feeds.html', {
        'user': user,
        'findfriends': findfriends
    })

Upvotes: 1

Related Questions