스크립트를 수정할 때마다 빌드명령하는게 불편하기 때문에 wevpack-dev-server를 이용한다. package.json 에 등록한 스크립트 ‘devserver’를 실행시키기 위해서 npm run devserver 한다.
소스를 변경하면 개발서버가 변경을 감지해서 빌드한것 처럼 브라우저를 갱신 시켜준다.
외부사이트를 아이프레임으로 불러오는 경우 높이 값을 수정하고 싶을때 ‘targetWindow.postMessage’를 이용해서 필요한 데이터를 전송, 전달 받을 수 있다.
크로스도메인에서도 사용가능한 방법이다.
<!-- mysite.com -->
<iframe id ="sizetracker" src="http://redcong.com/test.php" scrolling="auto" frameborder="0" allowtransparency="true" class="reser_frame" style="height: 500px !important;"></iframe>
<script type="text/javascript">
window.addEventListener("message", function(e){
var data = JSON.parse(e.data);
console.log(data);
}, false);
</script>
<!-- example.com -->
<div>...</div>
<script type="text/javascript">
parent.postMessage(
'{"height": '+ document.body.scrollHeight +'}',
"http://mysite.com" // '*' 사용할 경우 모든 도메인 허용
</script>
이전 포스트에서 django 설치, 관리자 페이지 및 hello world 페이지 까지 작성하였다. 본 포스트에서는 리스트 페이지, 뷰페이지, 글쓰기 및 수정 삭제 기능, 페이징, 검색기능을 구현하려고 한다.
목록
리스트 페이지 작성
뷰 페이지 작성
글쓰기 페이지 작성
수정페이지 작성
삭제기능 추가
템플렛 다듬기
1 . 리스트페이지 작성
view.py에서 사용할 모델을 import한다. 그리고 현재보다 미래의 글은 리스트에 출력되면 안되기 때문에 시간을 처리해주는 장고 내장함수(timezone)를 import 한다.
#view.py
from django.shortcuts import render
from django.http import HttpResponse
from django.utils import timezone
from .models import Post
# Create your views here.
def index(requests):
posts = Post.objects.filter(published_date__lte = timezone.now())
return render(requests, 'myblog/list.html', {'posts' : posts})
render함수에 requests, ‘템플릿경로’, ‘데이터 객체’를 전달하고 리턴해주면 된다. localhost:8000/myblog 로 접속해보면 템플렛을 찾을수 없다고 에러가 발생할 것이다. 장고가 render 함수로 전달된 ‘myblog/list.html’ 부분을 찾게 해주기 위해서 해당 경로에 디렉토리 및 파일을 생성해준다.
templates 폴더 안에 앱이름으로 폴더를 생성하는 이유는 django는 프로젝트내 에서 모든 templates 폴더를 한곳으로 모아 파일을 찾는데 같은 파일이름이 있을 수 있으면 문제가 발생하기 때문에 네임스페이를 처리해주기 위해서 관행적으로 생성해준다고 한다.
from django import forms
from .models import Post
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = ('autor', 'title', 'content', 'created_date', 'published_date')
3) view.py 에 write함수 추가
def write(request):
if request.method == 'POST':
form = PostForm(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.author = request.user
post.save()
return HttpResponseRedirect(reverse('myblog:post', args=(post.pk,)))
else :
form = PostForm()
return render(request, 'myblog/write.html', {'form' : form})