【问题标题】:Filtering Django Objects and displaying data to HTML过滤 Django 对象并将数据显示为 HTML
【发布时间】:2018-12-16 02:03:01
【问题描述】:

我有一个 Django Web 应用程序,我想对其进行一些基本过滤。基本上,我有一个类似网站的社交媒体,用户可以在其中注册他们的爱好。我想要做的是有一个过滤器,用户现在可以选择只查看男性或女性用户。虽然我可以使用以下代码在 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)

网址部分:

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

还有 HTML 代码:

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

</ul>

但是,这并没有按预期工作,并且不会向显示器返回任何内容。我不确定为什么会出错 - 任何帮助/建议将不胜感激。

【问题讨论】:

    标签: python html django database orm


    【解决方案1】:

    对于我的函数视图,我传递了一个请求,然后传递了我需要的任何 kwargs。我没有尝试过你的方式,所以只是把它放在那里,以防它是问题的一部分。在这种情况下,我认为您不需要传递用户,因为它不是您的网址中的变量,并且您没有使用它来过滤查询。如果您还决定过滤女性用户,您还可以考虑重命名变量以使其更清晰:

    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>
    

    【讨论】:

      猜你喜欢
      • 2021-10-06
      • 2019-07-24
      • 2018-10-03
      • 2019-04-05
      • 2019-02-13
      • 1970-01-01
      • 2017-12-25
      • 2011-12-21
      • 2017-01-07
      相关资源
      最近更新 更多