过滤Django对象并将数据显示为HTML

时间:2018-12-16 02:03:01

标签: python html django database orm

我有一个Django网络应用,我想对其进行一些基本过滤。基本上,我有一个类似社交媒体的网站,用户可以在其中注册自己的爱好。我想要做的是有一个过滤器,用户可以选择现在仅查看男性或女性用户。尽管我可以在Python Shell中使用以下代码进行此操作:

from mainapp.models import Profile
Users = Profile.objects.all().filter(gender = "Male")

我无法在Django中实现此功能。这是我的models.py文件:

class Hobby(models.Model):
    name = models.CharField(max_length=50, default='')

    def __str__(self):
        return self.name

class Profile(models.Model):
    user = models.OneToOneField(
        to=User,
        blank=True,
        null=True,
        on_delete=models.CASCADE
    )
    gender = models.CharField(max_length=6, default='')
    age = models.CharField(max_length=3, default='')
    dob = models.CharField(max_length=10, default='')
    image = models.ImageField(upload_to='profile_images')
    hobbies = models.ManyToManyField(Hobby)

Views.py文件中的过滤器功能

def filter(user):
    other_users = Profile.objects.all()
    filter_results = other_users.filter(gender = "Male")
    context = {
    'appname': appname,
    'usersresults': filter_results
    }
    return render(request, 'mainapp/members.html', context)

Ulls部分:

path('filter/', views.filter, name='filter'),

以及HTML代码:

<ul>
    {% for user in usersresults %}
        <li>
            <a> {{user}}</a>
        </li>
    {% endfor %}

</ul>

但是,这不能按预期方式工作,也不会向显示屏返回任何内容。我不确定为什么会出错-我们将不胜感激任何帮助/建议。

1 个答案:

答案 0 :(得分:0)

对于我的函数视图,我传递一个请求,然后再传递任何需要的参数。我没有尝试过您所拥有的方法,因此只需将其放到外面,以防它成为问题的一部分。在这种情况下,我认为您不需要传递用户,因为它不是url中的变量,并且您没有使用它来过滤查询。您还可以考虑重命名变量以使其更清晰,以防您还决定过滤女性用户:

def filter(request):
    template = 'mainapp/members.html'
    male_users = Profile.objects.filter(gender="Male")
    context = {
    'male_users': male_users
    }
    return render(request, template, context)

然后在模板中:

<ul>
    {% for male in male_users %}
        <li>
            <a> {{ male.user }}</a>
        </li>
    {% endfor %}
</ul>