简体   繁体   中英

TypeError when redirecting to Django URL

Very simple one but cannot seem to find the issue:

TypeError at /userlookup/foo
userlookup() got an unexpected keyword argument 'username'

views.py

def userlookup (request, username):

     if request.method == "GET":

        UserId = User.objects.get(user=username).id
        UserPosts = Post.objects.filter(user=UserId)
        UserPosts = list(UserPosts.order_by("-timestamp").all())

        p_all = Paginator(UserPosts, 10)
        page_number = request.GET.get('page')
        page_obj_all = p_all.get_page(page_number)

        return render(request, "network/userlookup.html",{
        "page_obj_all": page_obj_all,
        "allposts": UserPosts,
        })

url.py

path("user/<str:username>", views.userlookup, name="userlookup"),

html (Properly looping, but shortening for visibility)

(Some Stuff)
<div class="card-body">
              <h5 class="card-title" id="Username">{{ allpost.user }}</h5>
              <a href="{% url 'userlookup' allpost.user%}">{{ allpost.user }} 's profile</a>
              <p>User ID = {{ allpost.user.id }}</p> 
</div>
(Some Stuff)

Question: Why the error?

  • I understand that allpost.user = foo.
  • I pass "foo" to the URL called userlookup.
  • The URL do accept a STR called username.
  • My function then grab the username, fetch the data based on the username and (should) return "username/foo" with the relevant data.

Hope you can help!

EDIT:

Models

class User(AbstractUser):
    pass

class Profile(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    following = models.ManyToManyField("User", blank=True, related_name="following_name")
    follower = models.ManyToManyField("User", blank=True, related_name="follower_name")
    
    def serialize(self):
        return {
            "id": self.id,
            "following": [user.profile for user in self.following.all()],
            "follower": [user.profile for user in self.follower.all()],
        }

class Post(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    timestamp = models.DateTimeField(auto_now_add=True)
    post = models.CharField(max_length=350, null=True, blank=True)
    like = models.ManyToManyField("User", blank=True, related_name="like_amount")

    def serialize(self):
        return {
            "id": self.id,
            "timestamp": self.timestamp.strftime("%b %-d %Y, %-I:%M %p"),
            "post": self.post,
            "like": [user.post for user in self.like.all()],
        }

Calling the wrong.py file in the URL.

views.userlookup => tests.userlookup

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM