Django file upload returns None - python

I'm trying to learn Python and Django, when I try to upload a file in my form Django detect my file as "None".
forms.py:
from django import forms
class FormularioTrabajo(forms.Form):
email = forms.EmailField(label="Correo Electrónico:", max_length=254)
Currículum = forms.FileField()
views.py:
In views I want to save the file uploaded in the directory /media/
def trabaja(request):
if request.method == 'POST':
form = FormularioTrabajo(data=request.POST, files=request.FILES)
if form.is_valid():
file = request.FILES.get('file', None)
if file is not None:
file_name = file.name
file_path = '/media/' + file_name
with open(file_path, 'wb+') as destination:
for chunk in file.chunks:
destination.write(chunk)
form.save()
return HttpResponseRedirect(reverse("miapp:index"))
else:
return HttpResponse('None')
else:
form = FormularioTrabajo()
return render(request, "web/trabajar.html", {'form':form})
This is my template html:
{% load bootstrap5 %}
{% bootstrap_css %}
{% bootstrap_javascript %}
{% bootstrap_messages %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
{% load static %}
<link rel="stylesheet" href="{% static '/style.css' %}">
<script src="https://cdn.jsdelivr.net/npm/bootstrap#5.2.2/dist/js/bootstrap.bundle.min.js"></script>
<title>Trabaja con nosotros</title>
</head>
<body>
<header>
<br>
<ul>
<li>Conócenos</li>
<li>Inicio de Sesión</li>
<li>Registro de usuario</li>
<li>Contacta con nosotros</li>
</ul>
{% load static %}
<img src="{% static 'img/logo.PNG'%}" class="logo">
</header>
<div class="work-box">
<h3>Solicitud de Trabajo</h3>
<form id="contactForm" method="post" enctype="multipart/form-data">
{% csrf_token %}
{% bootstrap_form form %}
{% buttons %}
<button class="btn btn-primary btn-lg" type="submit">Submit</button>
{% endbuttons %}
</form>
</div>
</body>
</html>

Please correct this line
if form.is_valid():
file = request.FILES.get('Currículum', None)

Related

CSS is only applying on few html files and not rest

So i am building a personal website and am using Materialize for web designing. At first it was good and my pages look good, but then I added some new pages and i found that the css is not applied in these new pages, can anybody help me in solving this.
Actually both are same pages(categories.html) but the path are different.
header.html (main html file, have not changed the name yet)
<<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<!--Import Google Icon Font-->
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<!--Import materialize.css-->
<link type="text/css" rel="stylesheet" href="static/main/materialize.css" media="screen,projection"/>
</head>
<body>
{% load static %}
{% include "main/includes/navbar.html" %}
{% include "main/includes/messages.html" %}
<main>
<div style="background-image: url('https://www.google.com/url?sa=i&url=https%3A%2F%2Fwallpapersafari.com%2Fw%2FcU6JWo&psig=AOvVaw1eBAulQvnXOrIK1yQueVX5&ust=1623841457736000&source=images&cd=vfe&ved=0CAIQjRxqFwoTCPje9_--mfECFQAAAAAdAAAAABAD')">
<div class = "container">
<br>
{% block content %}
{% endblock %}
</div>
</div>
</main>
{% include "main/includes/footer.html" %}
<script type="text/javascript" src="static/main/materialize.js"></script>
</body>
</html>
views.py
from django.shortcuts import render, redirect
from django.http import HttpResponse
from .models import Item, ItemSeries, ItemCategory
from django.contrib.auth.forms import AuthenticationForm
from django.contrib.auth import login, logout, authenticate
from django.contrib import messages
from .forms import NewUserForm
def single_slug(request, single_slug):
categories = [c.category_slug for c in ItemCategory.objects.all()]
if single_slug in categories:
matching_series = ItemSeries.objects.filter(item_category__category_slug=single_slug)
series_urls = {}
for m in matching_series.all():
part_one = Item.objects.filter(item_series__item_series=m.item_series).earliest("item_update")
series_urls[m] = part_one.item_slug
return render(request,
"main/category.html",
{"part_ones": series_urls})
items = [c.item_slug for c in Item.objects.all()]
if single_slug in items:
this_item = Item.objects.get(item_slug=single_slug)
return render(request,
"main/item.html",
{"item":this_item})
return HttpResponse(f"{single_slug} does not correspond to anything.")
def product(request):
return render(request = request,
template_name = "main/categories.html",
context ={"categories": ItemCategory.objects.all})
def homepage(request):
return render(request = request,
template_name = "main/categories.html",
context ={"categories": ItemCategory.objects.all})
def about(request):
return render(request = request,
template_name = "main/about.html",
context ={"categories": ItemCategory.objects.all})
def contact(request):
return render(request = request,
template_name = "main/contact.html",
context ={"categories": ItemCategory.objects.all})
def register(request):
if request.method == "POST":
form = NewUserForm(request.POST)
if form.is_valid():
user = form.save()
username = form.cleaned_data.get('username')
messages.success(request, f"New Account Created: {username}")
login(request, user)
messages.info(request, f"You are now logged in as: {username}")
return redirect("main:homepage")
else:
for msg in form.error_messages:
messages.error(request, f"{msg}: {form.error_messages[msg]}")
form = NewUserForm
return render(request,
"main/register.html",
context = {"form": form})
def logout_request(request):
logout(request)
messages.info(request, "Logged out successfully!")
return redirect("main:homepage")
def login_request(request):
if request.method == "POST":
form = AuthenticationForm(request, data = request.POST)
if form.is_valid():
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password')
user = authenticate(username = username, password = password)
if user is not None:
login(request, user)
messages.info(request, f"You are now logged in as: {username}")
return redirect("main:homepage")
else:
messages.error(request, "Invalid username or password")
else:
messages.error(request, "Invalid username or password")
form = AuthenticationForm()
return render(request,
"main/login.html",
{"form": form})
navbar.html
{% load static %}
<!-- Dropdown Structure -->
<ul id='dropdown1' class='dropdown-content'>
<li>one</li>
<li>two</li>
<li class="divider" tabindex="-1"></li>
<li>three</li>
<li><i class="material-icons">view_module</i>four</li>
<li><i class="material-icons">cloud</i>five</li>
</ul>
<nav>
<div id="nav-wrapper">
<div>
<ul class="center hide-on-med-and-down">
<li>
Home
</li>
<li>
About Us
</li>
<li>
Products
</li>
<li>
Services
</li>
<li>
Contact
</li>
<li>
<a class='dropdown-trigger btn' href='#' data-target='dropdown1'>Drop Me!</a>
</li>
</ul>
</div>
</div>
</nav>
categories.html
{% extends "main/header.html" %}
{% block content %}
<div class="row">
{% for cat in categories %}
<div class="col s12 m6 l4">
<a href="{{cat.category_slug}}", style="color:#000">
<div class="card hoverable">
<div class="card-content">
<div class="card-title">{{cat.item_category}}</div>
<p>{{cat.category_summary}}</p>
</div>
</div>
</a>
</div>
{% endfor %}
</div>
{% endblock %}
When CSS worked This is home page
When CSS did not work This is the same homepage after clicking 'about us' link form navbar
I am stuck and don't know what to do next, any help would be appretiated.
According to the comment above, i changed my header.html,
<<!DOCTYPE html> <html> <head> <meta charset="utf-8">
<!--Import Google Icon Font-->
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<!--Import materialize.css-->
<link type="text/css" rel="stylesheet" href="/static/main/materialize.css" media="screen,projection"/>
</head>
<body>
{% load static %}
{% include "main/includes/navbar.html" %}
{% include "main/includes/messages.html" %}
<main>
<div style="background-image: url('https://www.google.com/url?sa=i&url=https%3A%2F%2Fwallpapersafari.com%2Fw%2FcU6JWo&psig=AOvVaw1eBAulQvnXOrIK1yQueVX5&ust=1623841457736000&source=images&cd=vfe&ved=0CAIQjRxqFwoTCPje9_--mfECFQAAAAAdAAAAABAD')">
<div class = "container">
<br>
{% block content %}
{% endblock %}
</div>
</div>
</main>
{% include "main/includes/footer.html" %}
<script type="text/javascript" src="/static/main/materialize.js"></script> </body> </html>
notice the href of css and js link tag.
There are a few things that I have seen here that don't look correct. Number 1, Are you inheriting your template from your base?
{% extends 'base.html' %}
This is where you should call your materialize.css (in the base template)
Load static is in the wrong place, you are calling static after the link to the css, load static should be at the very top of the template:
{% extends 'base.html' %} {% load static %}
You have an extra opening chevron in your DOCTYPE.
Put materialize js in you base template before closing body tag. Django by default inherits the default base template so this is what you could be missing.
In case I have misunderstood, and you are only wanting to call materialize.css for that header template you can use tags after the call for load static
{% block extra_css %}<link rel="stylesheet" href="{% static 'main/materialize.css' %}"> {% endblock extra_css %}
This might help:
{% load static %} above doctype tag!
{% load static %}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<!--Import Google Icon Font-->
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<!--Import materialize.css-->
<link type="text/css" rel="stylesheet" href="{% static 'main/materialize.css' %}" media="screen,projection"/>
</head>
<body>
{% include "main/includes/navbar.html" %}
{% include "main/includes/messages.html" %}
<main>
<div style="background-image: url('https://www.google.com/url?sa=i&url=https%3A%2F%2Fwallpapersafari.com%2Fw%2FcU6JWo&psig=AOvVaw1eBAulQvnXOrIK1yQueVX5&ust=1623841457736000&source=images&cd=vfe&ved=0CAIQjRxqFwoTCPje9_--mfECFQAAAAAdAAAAABAD')">
<div class = "container">
<br>
{% block content %}
{% endblock %}
</div>
</div>
</main>
{% include "main/includes/footer.html" %}
<script type="text/javascript" src="{% static 'main/materialize.js' %}"></script>
</body>
</html>
In every html page {% load static %} below {% block content %} and above the html of the page!
Static files path:
{% static 'app name/filefoldername' %}
Hope you understood! Look for some tutorials on youtube also!

Django - Save Form Value in Different Views

I'm trying to create a small app in which a user can view an event, submit a form indicating the quantity of tickets they would like, view their basket and finally go to a checkout page.
My problem is that after I submit a form for event1, the value that is posted is lost when I try to view another event or refresh the basket. How can I prevent this from happening? I need to use Django to make use of a python module during the checkout process so I need to be able to retrieve the quantities submitted for any event in the final checkout view.
My views.py file:
def basket(request):
context = {'Event 1 Tickets': event1_tickets, 'Event 2 Tickets': event2_tickets}
return render(request, 'first_app/basket.html', context)
def event2(request):
form = forms.TicketForm()
form = forms.TicketForm(request.POST)
if request.POST:
if form.is_valid():
# form.save(commit=True)
quantity = form.cleaned_data['quantity']
return render(request,'first_app/basket.html',{'event2_tickets': form.cleaned_data})
else:
form = TicketForm()
return render(request, 'first_app/event2.html', {'form': form})
def event1(request):
form = forms.TicketForm()
form = forms.TicketForm(request.POST)
if request.POST:
if form.is_valid():
# form.save(commit=True)
quantity = form.cleaned_data['quantity']
return render(request,'first_app/basket.html',{'event1_tickets': form.cleaned_data})
else:
form = TicketForm()
return render(request, 'first_app/event1.html', {'form': form})
My forms.py:
from django import forms
class TicketForm(forms.Form):
quantity = forms.IntegerField(label="Ticket Quantity",min_value=1,max_value=9,required=True, widget=forms.NumberInput)
My event1/event2.html:
<!DOCTYPE html>
{% load static %}
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
<link rel="stylesheet" href="{% static "css/style.css" %}"/>
</head>
<body>
<div class="topnav">
<a class="" href="{% url 'index' %}">Home</a>
Basket
</div>
<div>
<form action="" method="post">
{% csrf_token %}
{{ form }}
<input type="submit" value="Submit">
</form>
</div>
</body>
</html>
My static basket.html:
<!DOCTYPE html>
{% load static %}
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
<link rel="stylesheet" href="{% static "css/style.css" %}"/>
<!-- <script src="{% static "javascript/script.css" %}"/></script> -->
</head>
<body>
<div class="topnav">
Home
<a class="active" href="{% url 'basket' %}">Basket</a>
</div>
<div>
<h1>Tickets for Event 1 {{ event1_tickets.quantity }}</h1>
<h1>Tickets for Event 2 {{ event2_tickets.quantity }}</h1>
</div>
<button type="button" class="button" onclick = "window.location.href='{% url 'checkout' %}' ">Checkout</button>
</body>
</html>
My urls.py file:
from django.conf.urls import url
from django.urls import path
from . import views
urlpatterns = [
path('checkout/', views.checkout, name='checkout'),
path('basket/', views.basket, name='basket'),
path('event1/', views.event1, name='event1'),
path('event2/', views.event2, name='event2'),
]

Operational error at / no such table: tasks_task even after creating a table

Here is my html file of landing page.
{% load static %}
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<link rel="stylesheet" href="{% static 'css/base.css' %}">
</head>
<body>
<div class="center-column">
<form method="POST" action="/">
{% csrf_token %}
{{form.title}}
<input class="btn btn-info" type="submit" name="Create Task">
</form>
<div class="todo-list">
{% for task in tasks %}
<div class="item-row">
<a class="btn btn-sm btn-info" href="{% url 'update_task' task.id %}">Update</a>
<a class="btn btn-sm btn-danger" href="{% url 'delete' task.id %}">Delete</a>
{% if task.complete == True %}
<strike>{{task}}</strike>
{% else %}
<span>{{task}}</span>
{% endif %}
</div>
{% endfor %}
</div>
</div>
</body>
</html>
Here is Models.py file where a table is created
class Task(models.Model):
title = models.CharField(max_length=200)
complete = models.BooleanField(default=False)
created = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
Error i am getting
OperationalError at /
no such table: tasks_task
C:\Users\91870\Desktop\Django\todo\tasks\templates\tasks\list.html, error at line 15
line 15 is
{% for task in tasks %}
here is views.py file
def index(request):
tasks = Task.objects.all()
form = TaskForm()
if request.method =='POST':
form = TaskForm(request.POST)
if form.is_valid():
form.save()
return redirect('/')
return render(request, 'tasks/list.html', {'tasks':tasks, 'form':form})
It was working when i haven't applied the css but now it isn't.
Can someone please help me with this

Unable to store multiple images in django database

I am working on a hotel booking site , in which i give the user a option to upload their hotel in the site, In that i am interested in user to upload multiple images with out any particular limit, i wrote the model , the user successfully uploading the images but i am unable to store it in the database .
I got struck on this issue, i have searched everything on the web from the past one week , still not yet resolved, please help me on this issue .
Here is my model
hotel_rating_choices = (
('1','1'),
('2','2'),
('3','3'),
('4','4'),
('5','5'),
('6','6'),
('7','7'),
)
class Hotel(models.Model):
Hotel_Name = models.CharField(max_length=50)
location = models.CharField(max_length=20)
no_of_rooms = models.IntegerField()
rating = models.CharField(max_length=1, choices=hotel_rating_choices, default=3)
hotel_img = models.FileField(upload_to='hotel_images/')
uploaded_at = models.DateTimeField(auto_now_add=True)
user = models.ForeignKey(User, on_delete=models.CASCADE, blank=True)
def __str__(self):
return self.Hotel_Name
Here is my form
class add_hotel(forms.ModelForm):
class Meta:
model = Hotel
fields = ('Hotel_Name', 'location', 'rating','no_of_rooms', 'user','hotel_img', )
# exclude = ['id']
widgets = {
'hotel_img' : forms.ClearableFileInput(attrs={'multiple': True})
}
Here is my view
class BasicUploadView(CreateView):
template_name = 'photos/basic_upload/index.html'
model = Hotel
form_class = add_hotel
success_url = reverse_lazy('home')
def get(self, request, *args, **kwargs):
form = add_hotel
return render(
self.request,
template_name = self.template_name,
context={'form' : form}
)
def post(self, request, *args, **kwargs):
import ipdb
ipdb.set_trace()
form = self.form_class(request.POST, request.FILES)
if form.is_valid():
photo = form.save()
data = {'is_valid': True, 'name':photo.hotel_img.name, 'url': photo.hotel_img.url}
return redirect('home')
else:
data = {'is_valid' : False}
return render(request, self.template_name, {'form': form})
Here is my template
{% load static from staticfiles %}
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Euphoria booking</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="" />
<meta name="keywords" content="" />
<meta name="author" content="" />
<!-- Icomoon Icon Fonts-->
<link rel="stylesheet" href="{% static 'css/icomoon.css' %}">
<!-- Theme style -->
<link rel="stylesheet" href="{% static 'css/style.css' %}">
<link rel="stylesheet" href="{% static 'css/bootstrap.css' %}">
</head>
<body>
<div style="margin-bottom: 20px;">
<form method="post" enctype="multipart/form-data">
{% csrf_token %}
<table id="gallery" class="table table-bordered">
<tbody>
{% csrf_token %}
{% for field in form %}
<tr>
{{ field.errors }}
<td> {{ field.label_tag }}</td>
<td>{{ field }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<b>For uploading of more hotel photos</b>
<div align="center">
<button type="button" class="btn btn-primary js-upload-photos">
Upload photos
</button>
<input id="fileupload" type="file" name="hotel_img" multiple
style="display: none;"
data-url="{% url 'basic_upload' %}"
data-form-data='{"csrfmiddlewaretoken": "{{ csrf_token }}"}'>
</div>
<input type="submit" value="Submit" style="margin-left: 37%;" />
</form>
</div>
<div class="modal fade" id="modal-progress" data-backdrop="static" data- keyboard="false">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Uploading...</h4>
</div>
<div class="modal-body">
<div class="progress">
<div class="progress-bar" role="progressbar" style="width: 0%;">0% </div>
</div>
</div>
</div>
</div>
</div>
{% block javascript %}
{# JQUERY FILE UPLOAD SCRIPTS #}
<script src="{% static 'js/jquery-file-upload/vendor/jquery.ui.widget.js' %}"></script>
<script src="{% static 'js/jquery-file-upload/jquery.iframe-transport.js' %}"></script>
<script src="{% static 'js/jquery-file-upload/jquery.fileupload.js' %}"></script>
<link href="{% static 'css/bootstrap.min.css' %}" rel="stylesheet">
{# PHOTOS PAGE SCRIPTS #}
<script src="{% static '/js/progress-bar-upload.js' %}"></script>
{% endblock %}
</div>
</body>
</html>
Ignore the progress bar , css stuff, i want to know why i am unable to store multiple images
Reference

How to allow users to upload a post with pictures in Django?

This is what I have at the moment in my models.py
class Document(models.Model):
docfile = models.FileField(upload_to='documents/%Y/%m/%d')
img = models.ImageField(upload_to='documents/%Y/%m/%d', null=True, blank=True)
admin.py#
from django.contrib import admin
from imagine.models import Document
admin.site.register(Document)
views.py#
from django.shortcuts import render_to_response
from django.template import RequestContext
from django.core.urlresolvers import reverse
from imagine.models import Document
from forms import DocumentForm
def list(request):
# Handle file upload
if request.method == 'POST':
form = DocumentForm(request.POST, request.FILES)
if form.is_valid():
newdoc = Document(docfile = request.FILES['docfile'])
newdoc.save()
# Redirect to the document list after POST
return HttpResponseRedirect(reverse('facetut.views.list'))
else:
form = DocumentForm() # A empty, unbound form
# Load documents for the list page
documents = Document.objects.all()
# Render list page with the documents and the form
return render_to_response(
'list.html',
{'documents': documents, 'form': form},
context_instance=RequestContext(request))
list.html#
{% extends "base.html" %}
{% load staticfiles %}
{% block content %}
<head>
<!-- Theme Made By www.w3schools.com - No Copyright -->
<title>facemail</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>
<style>
.jumbotron {
background-color: #f4511e;
color: #fff;
}
</style>
</head>
<body>
<div class="jumbotron text-center">
<h1>FaceMail</h1>
<p>who knew Email could be fun aGain</p>
</div>
{% endblock %}
{% block content2 %}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Minimal Django File Upload Example</title>
</head>
<body>
<h2>Current Posts</h2>
<!-- List of uploaded documents -->
{% if documents %}
<ul>
{% for document in documents %}
<li>{{ document.docfile.name }}</li>
<img src="{{ document.img.url }}">
{% endfor %}
</ul>
{% else %}
<p>No documents.</p>
{% endif %}
<br>
<br>
<!-- Upload form. Note enctype attribute! -->
<form action="{% url "list" %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
<p>{{ form.non_field_errors }}</p>
<p>{{ form.docfile.label_tag }} {{ form.docfile.help_text }}</p>
<p>
{{ form.docfile.errors }}
{{ form.docfile }}
</p>
<p><input type="submit" value="Upload" /></p>
</form>
</body>
</html>
{% endblock %}
any feedback would be great when i do it it just shows me a link with no picture?
I want it to be like a post or blog but with a imagefield were there could be a story and then a picture as well but the imagefield with django can be a pain in the butt if you ask me so simple but so hard please help me

Categories