【问题标题】:Django OSError [Errno 22] Invalid ArgumentDjango OSError [Errno 22] 无效参数
【发布时间】:2018-10-05 12:10:38
【问题描述】:

我收到以下错误:

OSError at /index/
[Errno 22] Invalid argument: 'C:\\Users\\username\\PycharmProjects\\DjangoTestS\\templates\\<django.template.backends.django.Template object at 0x00000262E5F2F2B0>'

我相信这是因为我的 django 代码找不到我的模板文件。 django中获取模板的代码如下:

index_model = loader.get_template('index.html') 

我的模板字典如下:

'DIRS': [os.path.join(BASE_DIR, 'templates'),
             'C:\\Users\\username\\PycharmProjects\\DjangoTestS',],

我尝试过的类似问题的解决方案:

  • 将项目位置硬编码到模板字典中。最初它是一种通常应该找到任何项目的模板文件夹的方法,但这不起作用。硬编码的方式也不起作用。

  • 一个 pycharm shell 帮助程序更改,将路径元素硬编码到 pycharm 项目文件夹。也没有用。

根据要求,这是导致错误的视图: def table_view(请求):

ip_address = get_client_ip(request)
browser = request.META['HTTP_USER_AGENT']
cur_visit = models.visit()
cur_visit.ip_address = ip_address
cur_visit.browser = browser
cur_visit.save()

index_model = loader.get_template('index.html')

all_visitors = models.visit.objects.all()

context = {'all_visitors': all_visitors}
return render(request, index_model, context)


def get_client_ip(request):
x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR')
if x_forwarded_for:
    ip = x_forwarded_for.split(',')[0]
else:
    ip = request.META.get('REMOTE_ADDR')
return ip

【问题讨论】:

  • 你能把你的视图写在你试图渲染模板的地方吗?
  • @Gahan def table_view(request): ip_address = get_client_ip(request) browser = request.META['HTTP_USER_AGENT'] cur_visit = models.visit() cur_visit.ip_address = ip_address cur_visit.browser = browser cur_visit .save() index_model = loader.get_template('index.html') all_visitors = models.visit.objects.all() context = {'all_visitors': all_visitors} return render(request, index_model, context)
  • 抱歉格式错误,不明白为什么格式不正确。
  • 设置/模板中 DIRS 的内容是什么?我遇到了同样的问题,这是因为我的 DIRS。

标签: python django


【解决方案1】:

如果您的模板存储在名为template_dir 的目录中,那么您可以将代码修改为'DIRS':[os.path.join(BASE_DIR,'template_dir')]。在您的代码中,您已使用templates 加入项目目录路径。哪个(目录)可能不存在。

get_template函数返回一个Template对象,它不适合render的函数模板,它(render)直接取模板名称template.html

【讨论】:

  • 不幸的是,我的模板文件夹实际上被称为“模板”,所以我认为这不是问题所在。感谢您的回复。
  • render() 采用模板名称而不是模板对象(由 get_template 函数返回。如果你想使用 get_template 你可以调用 render 作为 @ 的函数987654334@对象,就像这样HttpResponse(t.render(c, request), content_type='application/xhtml+xml')[从链接复制]docs.djangoproject.com/en/2.0/topics/http/shortcuts/…
【解决方案2】:

我遇到了同样的错误:

/url_path/ 处的 OSError
[Errno 22] 无效参数:

这仅仅是因为渲染时的参数顺序。这个抛出错误:

def contact(request):
    context = locals()
    template = 'contact.html',
    return render(request, context, template)

这个没有错误:

def contact(request):
    context = locals()
    template = 'contact.html',
    return render(request, template, context)

尽量保持项目中的顺序。

【讨论】:

    猜你喜欢
    • 2019-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 2021-02-10
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多