【问题标题】:For loop not working as expected in Django, HTMLFor 循环在 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 %}

【问题讨论】:

    标签: html django loops templates model


    【解决方案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 %}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-26
      • 2019-08-30
      • 2021-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多