2016-07-07 17 views
0

データベースの動的情報を表示する基本的なDjango Webサイトの設定があります。データベース情報をDjangoテンプレートで表示する前に操作する方法は?

私はデータベースから出てくるテキストを操作したいので、BBCodeパーサを作成することができます。私はDjangoをかなり新しくしているので、これがどこで行われるべきかについて少し混乱しています。

これらの私のファイルは...これまでModels.py

from django.db import models 

class Post(models.Model): 
    title = models.CharField(max_length=140) 
    body = models.TextField() 
    date = models.DateTimeField() 

    def __str__(self): 
     return self.title 

Urls.py

from django.conf.urls import url, include 
from django.views.generic import ListView, DetailView 
from forum.models import Post 

urlpatterns = [ 
    url(r'^$', ListView.as_view(queryset=Post.objects.all().order_by("-date")[:25], template_name="forum/forum.html")), 
    url(r'^(?P<pk>\d+)$', DetailView.as_view(model = Post, template_name = 'forum/post.html')), 
] 

Forum.html

{% extends "layout.html" %} 

{% block body %} 
    {% for post in object_list %} 
     <p>{{ post.date|date:"Y-m-d" }}<a href="/forum/{{post.id}}"> {{ post.title }}</a></p> 
    {% endfor %} 
{% endblock %} 

Functions.py

です

def bbcode(data): 
    data2 = data + "some random text" 

    return data2 

これらのファイルはすべて、 "coolsite"というルートプロジェクトフォルダにある "forum"ディレクトリ内にあります。

私は、どこかでfunctions.pyをインポートし、bbcode()メソッドを使用してデータベースから取得するテキストを操作する必要があることを理解しています。そうすれば、それは "forum.html"テンプレートに一度表示されると解析されます。

申し訳ありませんが重複した質問です。私は周りを検索し、私が探していたものを見つけることができませんでした。

これを正確に行うにはどうすればよいですか?

+0

種類のドキュメントを見つけることができますが、それはビューで行う必要があります。 – Sayse

答えて

2

ListViewメソッドをオーバーライドする必要があります。あなたのコード内のいくつかの変更を行う必要があります:

  • カスタムビューを設定し、あなたのURLの設定

urls.pyに

from django.conf.urls import url, include 
from django.views.generic import ListView, DetailView 
from forum.models import Post 
from forum.views import PostList 

urlpatterns = [ 
    url(r'^$', PostList.as_view(), name='post_list'), 
    url(r'^(?P<pk>\d+)$', DetailView.as_view(model = Post, template_name = 'forum/post.html')), 
] 
  • あなたにカスタムビューを作成します。リストビューに基づくapp(forum.views)

    # views.py 
    
    from django.views.generic import ListView 
    from forum.models import Post 
    
    
    class PostList(ListView): 
    
    model = Post 
    template_name = "forum/forum.html" 
    
    # here is where magic happens 
    def get_context_data(self, *args, **kwargs): 
        context = super(PostList, self).get_context_data(*args, **kwargs) 
        # context has the same context that you get in your template before 
        # so you can take data and work with it before return it to template 
        return context 
    

あなたは広範な質問のClass-Based Views here

+0

あなたは私の一日を救った! – oskarko

関連する問題