For 循环在 Django、HTML 中无法按预期工作

Posted

技术标签:

【中文标题】For 循环在 Django、HTML 中无法按预期工作【英文标题】:For loop not working as expected in Django, HTML 【发布时间】:2022-01-09 04:48:31 【问题描述】:

我正在尝试创建一个搜索栏,用户可以在其中搜索数据库中的特定用户。我在 search_users html 文件中创建了一个 for 循环,但该循环没有遍历我的任何用户。每当我尝试加载页面时,第一行都会加载(“您搜索了 ...”),但 for 循环中的任何内容都没有。

models.py

class User(AbstractUser):
    """User in a club."""
    username = models.EmailField(unique=True, blank=False)
    first_name = models.CharField(max_length=50, blank=False)
    last_name = models.CharField(max_length=50, blank=False)
    bio = models.CharField(max_length=520, blank=True)
    chess_experience = models.IntegerField(blank=False, validators = [MinValueValidator(0)])
    personal_statement = models.CharField(max_length=10000, blank=False)
    created_at = models.DateTimeField(auto_now_add=True)

views.py

def search_users(request):
   if request.method == "POST":
      searched = request.POST.get('searched',False)
      users = User.objects.filter(first_name__contains=searched)
      return render(request, 'search_users.html', 'searched': searched, 'users': users)
   else: 
      return render(request, 'search_users.html', )

search_users.html

% if searched %
   <h1>You searched for  searched </h1>
   % for user in users %
      <a href="% url 'show_user' user.id %"> user </a><br/>
   % endfor %
% else %
   <h1>You forgot to search for a member...</h1>
% endif %

【问题讨论】:

【参考方案1】:

我认为您不应该使用POST 请求进行搜索

我建议你一个基于类的解决方案:

# view.py

class SearchResultsView(ListView):
    model = User
    template_name = 'search_users.html'

    def get_queryset(self):
        query = self.request.GET.get('q')
        search_results = User.objects.filter(
            Q(first_name__icontains=query))
        )
        return search_results
# urls.py

from django.urls import path
from .views import SearchResultsView

urlpatterns = [
    ...
    path('search/', SearchResultsView.as_view(), name='search_results'), 
    ...
]
# search_user.html

% if search_results %
   % for user in search_results %
      <a href="% url 'show_user' user.id %"> user </a><br/>
   % endfor %
% else %
   <h1>You forgot to search for a member...</h1>
% endif %

【讨论】:

以上是关于For 循环在 Django、HTML 中无法按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Django 模板文件的 for 循环中使用条件标签

在Django模板中使用for循环显示多个chart.js图表

在 Django 中围绕 bootstrap html 标签封闭 For 循环

如何使用 DJango 在 for 循环中使用变量

Django模板中的for循环

Django dict键,for循环中的值不起作用