Django OSError [Errno 22]无效参数

时间:2018-04-25 06:08:19

标签: python django

我收到以下错误:

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',],

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

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

  • pycharm shell帮助器更改,将路径元素硬编码到pycharm projects文件夹。也没用。

根据要求,以下是导致错误的视图:     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)


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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

我遇到了同样的错误:

  

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

那仅仅是因为渲染时的参数顺序。这引发了错误:

random.choice

这是没有错误的:

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

尝试维护项目中的顺序。