我正在尝试直接从HTML将数据从CSV文件上传到数据库。
CONTACT_UPLOAD.HTML
{% extends 'base.html' %}
{% load crispy_forms_tags %}
{% block body %}
{{order}}
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
<label>Upload a file</label>
<input type="file" name="file">
<p>csv files only</p>
<button type="submit">upload</button>
</form>
{% endblock %}
VIEWS.PY
@permission_required('admin.can_add_log_entry')
def contact_upload(request):
#template = "contact_upload.html"
prompt = {
'order': 'Order of the CSV should be username, email, password1, password2'
}
if request.method == "GET":
return render(request, prompt)
csv_file = request.FILES['file']
if not csv_file.name.endswith('.csv'):
messages.error(request, 'This is not a csv file')
data_set = csv_file.read().decode('UTF-8')
io_string = io.StringIO(data_set)
next(io_string)
for column in csv.reader(io_string, delimiter=',', quotechar="|"):
_, created = Contact.objects.update_or_create(
username=column[0],
email=column[1],
password1=column[2],
password2=column[3]
)
context = {}
return render(request, 'officers/contact_upload.html', context)
URLS.PY
from officers import views as officer_views
from inventory import views as inventory_views
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('inventory.urls')),
path('register/', officer_views.register, name='register'),
path('contact_upload/', officer_views.contact_upload, name='contact_upload'),
path('laptops/', inventory_views.laptops, name='laptops'),
path('desktops/', inventory_views.desktops, name='desktops'),
path('mobiles/', inventory_views.mobiles, name='mobiles'),
path('profile/', officer_views.profile, name='profile'),
path('login/', auth_views.LoginView.as_view(template_name='officers/login.html'), name='login'),
path('logout/', auth_views.LogoutView.as_view(template_name='officers/logout.html'), name='logout'),
]
错误
Internal Server Error: /contact_upload/
Traceback (most recent call last):
File "C:\Users\Leah Adongo\PycharmProjects\inventory_management\venv\lib\site-packages\django\core\handlers\
exception.py", line 34, in inner
response = get_response(request)
File "C:\Users\Leah Adongo\PycharmProjects\inventory_management\venv\lib\site-packages\django\core\handlers\
base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "C:\Users\Leah Adongo\PycharmProjects\inventory_management\venv\lib\site-packages\django\core\handlers\
base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\Leah Adongo\PycharmProjects\inventory_management\venv\lib\site-packages\django\contrib\auth\d
ecorators.py", line 21, in _wrapped_view
return view_func(request, *args, **kwargs)
File "C:\Users\Leah Adongo\PycharmProjects\inventory_management\inventoryManagement\officers\views.py", line
34, in contact_upload
return render(request, prompt)
File "C:\Users\Leah Adongo\PycharmProjects\inventory_management\venv\lib\site-packages\django\shortcuts.py",
line 19, in render
content = loader.render_to_string(template_name, context, request, using=using)
File "C:\Users\Leah Adongo\PycharmProjects\inventory_management\venv\lib\site-packages\django\template\loade
r.py", line 61, in render_to_string
template = get_template(template_name, using=using)
File "C:\Users\Leah Adongo\PycharmProjects\inventory_management\venv\lib\site-packages\django\template\loade
r.py", line 15, in get_template
return engine.get_template(template_name)
File "C:\Users\Leah Adongo\PycharmProjects\inventory_management\venv\lib\site-packages\django\template\backe
nds\django.py", line 34, in get_template
return Template(self.engine.get_template(template_name), self)
File "C:\Users\Leah Adongo\PycharmProjects\inventory_management\venv\lib\site-packages\django\template\engin
e.py", line 143, in get_template
template, origin = self.find_template(template_name)
File "C:\Users\Leah Adongo\PycharmProjects\inventory_management\venv\lib\site-packages\django\template\engin
e.py", line 125, in find_template
template = loader.get_template(name, skip=skip)
File "C:\Users\Leah Adongo\PycharmProjects\inventory_management\venv\lib\site-packages\django\template\loade
rs\base.py", line 18, in get_template
for origin in self.get_template_sources(template_name):
File "C:\Users\Leah Adongo\PycharmProjects\inventory_management\venv\lib\site-packages\django\template\loade
rs\filesystem.py", line 36, in get_template_sources
name = safe_join(template_dir, template_name)
File "C:\Users\Leah Adongo\PycharmProjects\inventory_management\venv\lib\site-packages\django\utils\_os.py",
line 17, in safe_join
final_path = abspath(join(base, *paths))
File "C:\Users\Leah Adongo\AppData\Local\Programs\Python\Python37-32\lib\ntpath.py", line 115, in join
genericpath._check_arg_types('join', path, *paths)
File "C:\Users\Leah Adongo\AppData\Local\Programs\Python\Python37-32\lib\genericpath.py", line 149, in _chec
k_arg_types
(funcname, s.__class__.__name__)) from None
TypeError: join() argument must be str or bytes, not 'dict'
[03/Jan/2020 09:32:28] "GET /contact_upload/ HTTP/1.1" 500 131569
答案 0 :(得分:0)
我也遇到了你的问题。但是通过添加render模块和一些代码更改,我的问题得以解决。请注意我的代码:
from django.shortcuts import render
import datetime
def curr_datetime(request):
current_date = datetime.datetime.now()
return render(request, "current_datetime.html", locals())```