Python ';搜索';用takes_context=True修饰,因此它的第一个参数必须为';上下文';。Django 2.1.5
我使用Python ';搜索';用takes_context=True修饰,因此它的第一个参数必须为';上下文';。Django 2.1.5,python,django,Python,Django,我使用包含标记进行搜索,但这会导致错误“'search'用takes_context=True修饰,因此它必须有第一个参数'context'” 包含标签py @register.inclusion_tag('post/search_tpl.html', takes_context=True) def search(self, context, *args, **kwargs): request = context['request'] query = self.request.G
包含标记进行搜索,但这会导致错误“'search'用takes_context=True修饰,因此它必须有第一个参数'context'”
包含标签py
@register.inclusion_tag('post/search_tpl.html', takes_context=True)
def search(self, context, *args, **kwargs):
request = context['request']
query = self.request.GET.get('q')
founded = Post.objects.filter(Q(title__icontains=query)|Q(body__icontains=query))
return {'founded': founded}
这不是类,可以不使用“self”,但我得到一个错误“不能将None用作查询值”。如果我删除“self”-这会导致错误“无法使用None作为查询值”(此编辑如下)
如果我将“self”替换为第二位-这会导致错误“'search'没有收到参数的值:'self'”
搜索\u tpl.html
<svg xmlns="http://www.w3.org/2000/svg" style="display:none">
<symbol xmlns="http://www.w3.org/2000/svg" id="sbx-icon-search-13" viewBox="0 0 40 40">
<path d="M26.804 29.01c-2.832 2.34-6.465 3.746-10.426 3.746C7.333 32.756 0 25.424 0 16.378 0 7.333 7.333 0 16.378 0c9.046 0 16.378 7.333 16.378 16.378 0 3.96-1.406 7.594-3.746 10.426l10.534 10.534c.607.607.61 1.59-.004 2.202-.61.61-1.597.61-2.202.004L26.804 29.01zm-10.426.627c7.323 0 13.26-5.936 13.26-13.26 0-7.32-5.937-13.257-13.26-13.257C9.056 3.12 3.12 9.056 3.12 16.378c0 7.323 5.936 13.26 13.258 13.26z"
fill-rule="evenodd" />
</symbol>
<symbol xmlns="http://www.w3.org/2000/svg" id="sbx-icon-clear-3" viewBox="0 0 20 20">
<path d="M8.114 10L.944 2.83 0 1.885 1.886 0l.943.943L10 8.113l7.17-7.17.944-.943L20 1.886l-.943.943-7.17 7.17 7.17 7.17.943.944L18.114 20l-.943-.943-7.17-7.17-7.17 7.17-.944.943L0 18.114l.943-.943L8.113 10z" fill-rule="evenodd" />
</symbol>
</svg>
<form novalidate="novalidate" onsubmit="return false;" class="searchbox sbx-google" action="{% url 'search_view' %}" method='GET'>
<div role="search" class="sbx-google__wrapper">
<input type="search" name="q" placeholder="Поиск по сайту" autocomplete="off" required="required" class="sbx-google__input">
<button type="submit" title="Нажми, чтобы найти" class="sbx-google__submit">
<svg role="img" aria-label="Search">
<use xlink:href="#sbx-icon-search-13"></use>
</svg>
</button>
<button type="reset" title="Очисть" class="sbx-google__reset">
<svg role="img" aria-label="Reset">
<use xlink:href="#sbx-icon-clear-3"></use>
</svg>
</button>
</div>
</form>
<script type="text/javascript">
document.querySelector('.searchbox [type="reset"]').addEventListener('click', function() { this.parentNode.querySelector('input').focus();});
</script>
...
{% load inclusion_tag %}
...
{% search %}
...
这样怎么样:
@register.inclusion_tag('post/search_tpl.html', takes_context=True)
def search(context):
request = context['request']
query = request.GET.get('q') # removed self. That was causing the problem
if not query:
return {}
founded = Post.objects.filter(Q(title__icontains=query)|Q(body__icontains=query))
return {'founded': founded}
你能把整个stacktrace贴出来吗?第一版?还是第二个?这不是类,没有“self”也可以,但是我遇到了一个错误“不能将None用作查询值”def search(context):
Updated。仅此而已。这意味着您在request.GET.GET('q')
中没有得到任何值。您需要点击url,例如http://localhost:8000/?q=abc
。另外,我已经更新了我的答案,如果找不到查询,则返回一个空字典。Orry没有得到这个答案。也许你可以放一个调试器或者在代码中写print(request.GET)
,看看出现了什么。我用另一种方式决定了这一点。编写SearchView
并获取上下文,编写模板search.html
以显示结果,并在base\u generic.html
中编写搜索形式,听起来不错。请考虑一下,我希望它能给你一些关于这个问题的见解。
@register.inclusion_tag('post/search_tpl.html', takes_context=True)
def search(context):
request = context['request']
query = request.GET.get('q') # removed self. That was causing the problem
if not query:
return {}
founded = Post.objects.filter(Q(title__icontains=query)|Q(body__icontains=query))
return {'founded': founded}