base.html, header.html에서 context 값을 넣기 위해서 고군분투하다가 결국 해결했다!
참고한 사이트들
https://docs.djangoproject.com/en/dev/ref/templates/api/#subclassing-context-requestcontext
https://www.webforefront.com/django/setupdjangocontextprocessors.html
http://stackoverflow.com/questions/37176023/access-custom-context-processor-in-django-1-9
http://stackoverflow.com/questions/3722174/django-template-inheritance-and-context
http://stackoverflow.com/questions/21062560/django-variable-in-base-html
일단 settings.py의 template에 context_processors에 기본 값들이 추가가 되어있는데, 이를 템플릿에서 기본 context로 사용…하는것 같다. 그래서 내가 직접 여기에 추가를 해주면 기본 값으로 사용이 가능할 듯 하여 추가하였다.
'context_processors': [
...
'blog.context_processors.defaul'
]
로 추가를 해주고, blog 앱 디렉토리에 context_processors.py
를 만들어줌.
from blog.models import Category
def default(request):
code_list = Category.objects.filter(parent_category=1)
return dict(
code_list = code_list,
)
이렇게 넣어주니 기본 html 템플릿에서 {{ for category in code_ilst }}
이런 식으로 카테고리들을 불러올 수 있었다.
이것 외에 requestcontext를 활용해서 request의 기본 값들을 템플릿으로 받아올 수 있게 customizing 할 수 있다는데… 글쎼 잘 모르겠다 ㅠㅠ
Django Forms
기본 html forms 사용을 쉽게 사용하기 위해서 django에서 form을 제공해준다.
기본적으로 forms.py, views, templates 3가지를 만져줘야함
우선
forms.py
에서
from django import forms
class NameForm(forms.Form):
your_name = forms.CharField(label='Your name', max_length=100)
이 폼은 추후에 템플릿에서
<label for="your_name">Your name: </label>
<input id="your_name" type="text" name="your_name" maxlength="100" required />
이런 폼을 만들어준다. 즉, 우리는 그냥 <form>
태그와 submit만 만들어 주면 되는 것이다...
그리고 views에서 위의 만들어진 form을 불러준다
from django.shortcuts import render
from django.http import HttpResponseRedirect
from .forms import NameForm # 현재 디렉토리에 만든 forms 파일에서 NameForm을 부르기
def author_register(request):
if request.method == "POST":
form = NameForm(request.POST) # 이런 방식으로 받으면 위의 label로 받은 값이 그대로 전달되는지?
if form.is_valid():
return HttpResponseRedirect('/posts/')
else:
form = NameForm()
return render(
request,
"author_register.html",
{"form": form,}
)
이후 템플릿에서 기본 form 태그만 만들어 준 후에
{{ form }}
으로 불러주면 끝!
<form action="" method="POST">
{% csrf_token %}
{{ form }}
<input type="submit" value="Submit" />
</form>
form에서 사용 가능한 더 많은것들
다양한 필드 사용 가능: form field 공식문서
필드 위젯 사용가능: 위젯을 사용해서 Textarea등의 기능을 구현할수있다. widget 공식문서
Django form 잠시 deactive 시키기 (form.disabled=True)
form = NameForm()
if user.is_authenticated==False:
for key in form.fields:
form.fields[key].disabled = True # authenticate 되지 않으면 열리지 않음
form.fields[key].widget.attrs['placeholder'] = '로그인해주세요' # 기본 값 변경도 가능
참고문서들
http://stackoverflow.com/questions/15122895/create-user-inactive-as-default-is-active-default-false : 장고의 signal? 읽어보기
http://stackoverflow.com/questions/4945802/how-can-i-disable-a-model-field-in-a-django-form : 도움 많이됨.
http://stackoverflow.com/questions/324477/in-a-django-form-how-do-i-make-a-field-readonly-or-disabled-so-that-it-cannot : 어렵지만 instance 함수를 활용해서 하는 방법..? 무슨 말인지 잘 모르겠다.
장고에서 이메일 보내기
'backend > django' 카테고리의 다른 글
django에서 pytest 활용하기 (0) | 2017.10.10 |
---|---|
장고 스터디 모임 후기 (0) | 2017.04.17 |
장고에서 세션, 쿠키, 캐시에 대해서... (0) | 2017.04.16 |
django 소셜 로그인 기능 구현 (facebook) (0) | 2017.04.14 |
장고 페이지네이션 구현하기 (0) | 2017.04.05 |