Django 模板的表单输入 预期产量
假设用户在Django 模板的表单输入 预期产量,django,django-templates,Django,Django Templates,假设用户在表单中输入“anaconda”: Hashtag Search Results You searched for: anaconda 实际产量 forms.py from django.db import models class Location(models.Model): """ Model representing a Location, attached to Hashtag objects through a M2M relationship """
表单中输入“anaconda”:
Hashtag Search Results
You searched for: anaconda
实际产量
forms.py
from django.db import models
class Location(models.Model):
""" Model representing a Location, attached to Hashtag objects through a
M2M relationship """
name = models.CharField(max_length=1400)
def __str__(self):
return self.name
class Hashtag(models.Model):
""" Model representing a specific Hashtag serch by user """
search_text = models.CharField(max_length=140, primary_key=True)
locations = models.ManyToManyField(Location, blank=True)
def __str__(self):
""" String for representing the Model object (search_text) """
return self.search_text
def display_locations(self):
""" Creates a list of the locations """
# Return a list of location names attached to the Hashtag model
return self.locations.values_list('name', flat=True).all()
from django import forms
from django.forms import ModelForm
from django.utils.translation import ugettext_lazy as _
from .models import Location, Hashtag
class SearchHashtagForm(ModelForm):
""" ModelForm for user to search by hashtag """
def clean_hashtag(self):
data = self.cleaned_data['search_text']
# Check search_query doesn't include '#'. If so, remove it.
if data[0] == '#':
data = data[1:]
# return the cleaned data
return data
class Meta:
model = Hashtag
fields = ['search_text',]
labels = {'search_text':_('Hashtag Search'), }
help_texts = { 'search_text': _('Enter a hashtag to search.'), }
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import get_object_or_404, render
from django.urls import reverse
from django.views import generic
from .models import Location, Hashtag
from .forms import SearchHashtagForm
def hashtag_search_index(request):
""" View function for user to enter search query """
# If POST, process Form data
if request.method == 'POST':
# Create a form instance and populate it with data from request (binding):
form = SearchHashtagForm(request.POST)
# Check if form is valid
if form.is_valid():
search_text = form.cleaned_data['search_text']
form.save()
# redirect to a new URL
return HttpResponseRedirect(reverse('mapping_twitter:results'))
# If GET (or any other method), create the default form
else:
form = SearchHashtagForm()
context = {'form':form, 'search_text':Hashtag.search_text}
return render(request, 'mapping_twitter/hashtag_search_index.html', context)
class SearchResultsView(generic.ListView):
""" Generic class-based view listing search results of locations """
model = Hashtag
template_name = 'mapping_twitter/results.html'
def get_queryset(self, **kwargs):
qs = super(SearchResultsView, self).get_queryset()
return qs
def get_context_data(self, **kwargs):
context = super(SearchResultsView, self).get_context_data(**kwargs)
context['search_text'] = Hashtag.objects.all()
return context
视图.py
from django.db import models
class Location(models.Model):
""" Model representing a Location, attached to Hashtag objects through a
M2M relationship """
name = models.CharField(max_length=1400)
def __str__(self):
return self.name
class Hashtag(models.Model):
""" Model representing a specific Hashtag serch by user """
search_text = models.CharField(max_length=140, primary_key=True)
locations = models.ManyToManyField(Location, blank=True)
def __str__(self):
""" String for representing the Model object (search_text) """
return self.search_text
def display_locations(self):
""" Creates a list of the locations """
# Return a list of location names attached to the Hashtag model
return self.locations.values_list('name', flat=True).all()
from django import forms
from django.forms import ModelForm
from django.utils.translation import ugettext_lazy as _
from .models import Location, Hashtag
class SearchHashtagForm(ModelForm):
""" ModelForm for user to search by hashtag """
def clean_hashtag(self):
data = self.cleaned_data['search_text']
# Check search_query doesn't include '#'. If so, remove it.
if data[0] == '#':
data = data[1:]
# return the cleaned data
return data
class Meta:
model = Hashtag
fields = ['search_text',]
labels = {'search_text':_('Hashtag Search'), }
help_texts = { 'search_text': _('Enter a hashtag to search.'), }
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import get_object_or_404, render
from django.urls import reverse
from django.views import generic
from .models import Location, Hashtag
from .forms import SearchHashtagForm
def hashtag_search_index(request):
""" View function for user to enter search query """
# If POST, process Form data
if request.method == 'POST':
# Create a form instance and populate it with data from request (binding):
form = SearchHashtagForm(request.POST)
# Check if form is valid
if form.is_valid():
search_text = form.cleaned_data['search_text']
form.save()
# redirect to a new URL
return HttpResponseRedirect(reverse('mapping_twitter:results'))
# If GET (or any other method), create the default form
else:
form = SearchHashtagForm()
context = {'form':form, 'search_text':Hashtag.search_text}
return render(request, 'mapping_twitter/hashtag_search_index.html', context)
class SearchResultsView(generic.ListView):
""" Generic class-based view listing search results of locations """
model = Hashtag
template_name = 'mapping_twitter/results.html'
def get_queryset(self, **kwargs):
qs = super(SearchResultsView, self).get_queryset()
return qs
def get_context_data(self, **kwargs):
context = super(SearchResultsView, self).get_context_data(**kwargs)
context['search_text'] = Hashtag.objects.all()
return context
results.html
<h1>Hashtag Search Results</h1>
<p>1) You searched for: {{ search_text }}</p>
{% for obj in queryset %}
<p>2) You searched for: {{ obj.search_text }}</p>
{% endfor %}
Hashtag搜索结果
1) 您搜索了:{{search_text}}
{queryset%中obj的%s}
2) 您搜索了:{{obj.search_text}
{%endfor%}
这是我的猜测,如果我错了,请纠正我。
对于要显示某个内容的模板,您必须将上下文或数据发送到该模板以进行打印,当您不发送任何内容时,该模板如何打印内容。所以
context.update({
'hashtag': //value you want to send.
})
这是我的猜测,如果我错了,请纠正我。
对于要显示某个内容的模板,您必须将上下文或数据发送到该模板以进行打印,当您不发送任何内容时,该模板如何打印内容。所以
context.update({
'hashtag': //value you want to send.
})
我认为您应该传递模型HashTag的queryset,因为您需要呈现HashTag.search\u文本,它是该模型的一个元素
因此,您可以在视图中传递查询集,并对其进行for循环,然后打印所有搜索文本,或者单独传递对象并渲染其搜索文本
上下文={
“queryset”:qs
}
{%for queryset%中的obj}
{{obj.search_text}
{%endfor%}
我认为您应该传递模型HashTag的queryset,因为您需要呈现HashTag.search\u文本,它是该模型的一个元素
因此,您可以在视图中传递查询集,并对其进行for循环,然后打印所有搜索文本,或者单独传递对象并渲染其搜索文本
上下文={
“queryset”:qs
}
{%for queryset%中的obj}
{{obj.search_text}
{%endfor%}
谢谢Vivek!我已尝试遵照你的指示,并已用修正案更新了上述问题。我现在可以呈现一些输出,但不能呈现预期的输出。如果可能的话,请您澄清我将如何通过视图中的查询集。因为,当我在views.py的上下文变量中包括{'queryset':qs}时,我得到一个NameError,指示没有定义qs。嗨,Vivek,我通过将queryset与object_list切换来返回预期的输出。例如:{%For object_list%中的obj}
qs是您将向其分配queryset的局部变量。如果我是对的,从您的问题中,您需要过滤掉包含搜索文本的对象。这将通过qs=HashTag.objects.filter(search\u text\uu iexact='anaconda')
实现。您可以将文本“anaconda”替换为所需的任何输入搜索字段文本。谢谢Vivek!我已尝试遵照你的指示,并已用修正案更新了上述问题。我现在可以呈现一些输出,但不能呈现预期的输出。如果可能的话,请您澄清我将如何通过视图中的查询集。因为,当我在views.py的上下文变量中包括{'queryset':qs}时,我得到一个NameError,指示没有定义qs。嗨,Vivek,我通过将queryset与object_list切换来返回预期的输出。例如:{%For object_list%中的obj}
qs是您将向其分配queryset的局部变量。如果我是对的,从您的问题中,您需要过滤掉包含搜索文本的对象。这样就可以通过qs=HashTag.objects.filter(search\u text\uu iexact='anaconda')
。您可以将文本“anaconda”替换为所需的任何输入搜索字段文本。