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图表