Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ';搜索';用takes_context=True修饰,因此它的第一个参数必须为';上下文';。Django 2.1.5_Python_Django - Fatal编程技术网

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}