본문 바로가기

Python/Django

[Django] Forms - 위젯과 스타일

이번에는 폼에서 위젯과 스타일링에 대해서 알아보겠습니다.

 

실제 폼의 스타일 지정 및 표시를 보다 구체적으로 제어하기 위해, 위젯 속성에 액세스할 수 있습니다.
이는 HTML 템플릿에 대한 걱정없이 Python 측면에서 훨씬 더 세부적인 레벨 제어를 제공합니다.
custom.css 파일을 보관할 'static' 파일 디렉토리를 연결하는 것으로 시작해보도록 하죠.

1. 애플리케이션 안에 'static' 폴더를 만드는 겁니다, app/static/app/custom.css
2. HTML 템플릿에서 'static' 디렉토리를 로드합니다.
3. href 내에서 'static' CSS 파일을 연결한 다음, migrate를 실행하여, settings.py의 새 앱을 로드합니다.

 


cars\templates\cars가 있는 것처럼 cars\static\cars가 되는 거죠. static\cars 폴더 안에 새 파일 custom.css 를 만듭니다.

 

.myform{
    border: 5px dashed red;
}

 

 

rental_review.html 수정 - 최상단에 static 로딩 코드 추가

 

{% load static %} <==== 이 부분 추가

<!DOCTYPE html>
<html lang="en">

...

    <link rel="stylesheet" href="{% static 'cars/custom.css' %}"> <==== 이 부분 추가

    <title>Rental Review</title>
    
    
<body>
    <h1>Rental Review Form PAGE</h1>
    <div class="container myform"> <==== 이 부분 추가
        <form action="" method="POST">

 


복습 - settings.py 에 장고앱 설정부분 확

INSTALLED_APPS = [
    'cars.apps.CarsConfig', # <=== add new Django app
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

...

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True, # <=== 기본설정 확인
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

...

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/4.1/howto/static-files/

STATIC_URL = 'static/'

 

 

migrate 및 runserver 실행

 

(django) D:\workspace\Python\Django\DJANGO4\DJANGO_COURSE_V2\10-Django-Forms\my_site>python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  No migrations to apply.

(django) D:\workspace\Python\Django\DJANGO4\DJANGO_COURSE_V2\10-Django-Forms\my_site>python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
December 14, 2022 - 18:12:40
Django version 4.1.2, using settings 'my_site.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

 

 

실제 구현한 결과화면

 

 

여기서 review 부분에 위젯 옵션을 사용해보자

 

class ReviewForm(forms.Form):
    first_name = forms.CharField(label = 'First Name', max_length=100)
    last_name = forms.CharField(label = 'Last Name', max_length=100)
    email = forms.CharField(label = 'Email', max_length=100, required=False)
    review = forms.CharField(label='Please write your review here', required=False, widget=forms.Textarea())

 

 

결과화면은 아래와 같다

 

 

여기서 review 부분에 위젯에 속성을 추가해보

 

class ReviewForm(forms.Form):
    first_name = forms.CharField(label = 'First Name', max_length=100)
    last_name = forms.CharField(label = 'Last Name', max_length=100)
    email = forms.CharField(label = 'Email', max_length=100, required=False)
    review = forms.CharField(label='Please write your review here', required=False, 
                             widget=forms.Textarea(attrs={'class':'myform', 'rows':'2', 'cols':'2'}))