Rumah > Soal Jawab > teks badan
Selepas saya log masuk dan ia dimasukkan ke dalam halaman utama, adakah data di halaman utama akan diterima menggunakan borang? Saya tidak tahu cara meletakkan data yang ditemui pada halaman Adakah terdapat sebarang maklumat yang boleh anda cadangkan atau panduan
大家讲道理2017-05-18 11:01:39
Saya ingin memaparkan data yang terdapat dari pangkalan data pada halaman Saya ingin tahu sama ada ia dihantar menggunakan borang? Tiada rujukan ditemui
Saya akan menjawab soalan poster asal berdasarkan ayat ini.
Izinkan saya meringkaskan idea dahulu: gunakan penghalaan untuk menghantar data yang ditanya oleh SQLAlchemy kepada fungsi render_template melalui parameter, dan kemudian gunakan jinja2 dalam fail .html untuk memaparkan halaman web secara dinamik.
Sebagai contoh, kini anda mempunyai pangkalan data blog dan anda perlu memaparkan kandungan blog di halaman utama Bagaimana untuk memaparkannya?
Kaedah utama sebenarnya adalah menggunakan jinja2
untuk melaksanakannya Mula-mula, anggap anda mempunyai pangkalan data Post
(sudah ditakrifkan dalam models.py
. , jangan cakap awak tak faham!
jinja2
来实现,首先假设你有一个Post
数据库(已经在models.py
中定义好了的,别跟我说你不懂!!)
好吧你不懂,就像这样:
from . import db
class Post(db.Model):
__tablename__ = 'posts'
id = db.Column(db.Integer, primary_key=True)
body = db.Column(db.Text)
body_html = db.Column(db.Text)
timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
author_id = db.Column(db.Integer, db.ForeignKey('users.id'))
comments = db.relationship('Comment', backref='post', lazy='dynamic')
db.event.listen(Post.body, 'set', Post.on_changed_body)
什么你不懂db是哪里import来的?是app包里__init__.py
来的呀!这里懒得解释了,直接帖个完整的init方法吧
from flask import Flask
from flask_bootstrap import Bootstrap
from flask_mail import Mail
from flask_moment import Moment
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager
from flask_pagedown import PageDown
from config import config
bootstrap = Bootstrap()
mail = Mail()
moment = Moment()
db = SQLAlchemy()
pagedown = PageDown()
login_manager = LoginManager()
login_manager.session_protection = 'strong'
login_manager.login_view = 'auth.login'
def create_app(config_name):
app = Flask(__name__)
app.config.from_object(config[config_name])
config[config_name].init_app(app)
bootstrap.init_app(app)
mail.init_app(app)
moment.init_app(app)
db.init_app(app)
login_manager.init_app(app)
pagedown.init_app(app)
if not app.debug and not app.testing and not app.config['SSL_DISABLE']:
from flask_sslify import SSLify
sslify = SSLify(app)
from .main import main as main_blueprint
app.register_blueprint(main_blueprint)
from .auth import auth as auth_blueprint
app.register_blueprint(auth_blueprint, url_prefix='/auth')
from .api_1_0 import api as api_1_0_blueprint
app.register_blueprint(api_1_0_blueprint, url_prefix='/api/v1.0')
return app
不过更改数据库记得先运行python manager.py shell来迁移一下数据库呀(具体的自己查去)
扯远了,我们来看楼主的问题。
首先来看路由(就是views.py
)中的内容:
@main.route('/', methods=['GET', 'POST'])
def index():
#前面已经假设了你有个Post数据库
query = Post.query
#这里使用了pagination,就是自动实现翻页的一个扩展,可用可不用哈
pagination = query.order_by(Post.timestamp.desc()).paginate(
page, per_page=current_app.config['FLASKY_POSTS_PER_PAGE'],
error_out=False)
#这里才是重点,简单来说就是让posts=Post.query.order_by(Post.timestamp.desc())
posts = pagination.items
#然后用render_template传给html,交给jinja2来动态渲染
return render_template('index.html', form=form, posts=posts,
show_followed=show_followed, pagination=pagination)
现在让我们到index.html
中来看看jinja2
该如何工作,不过为了让index.html
看上去尽量简洁,我将打印Post的模块单独提了出来,叫_post.html
,在index.html
中使用只要{% include '_posts.html' %}
即可:
让我们来看_post.html
Nah anda tidak faham, ia seperti ini:
<ul class="posts">
<!--处理从路由传进来的posts,用一个for循环处理,语法酷似python-->
{% for post in posts %}
<li class="post">
<p class="post-thumbnail">
<a href="{{ url_for('.user', username=post.author.username) }}">
<img class="img-rounded profile-thumbnail" src="{{ post.author.gravatar(size=40) }}">
</a>
</p>
<p class="post-content">
<!--Post数据在这里显示,你要的答案就在这了。核心思想就是用jinja2 -->
<p class="post-date">{{ moment(post.timestamp).fromNow() }}</p>
<p class="post-author"><a href="{{ url_for('.user', username=post.author.username) }}">{{ post.author.username }}</a></p>
<p class="post-body">
{% if post.body_html %}
{{ post.body_html | safe }}
{% else %}
{{ post.body }}
{% endif %}
</p>
</p>
</li>
{% endfor %}
</ul>
Mengapa anda tidak faham dari mana datangnya import db? Ia datang daripada __init__.py
dalam pakej apl! Saya terlalu malas untuk menerangkannya di sini, jadi saya hanya akan menyiarkan kaedah init yang lengkap
Tetapi sebelum menukar pangkalan data, ingat untuk menjalankan python manager.py shell untuk memindahkan pangkalan data terlebih dahulu (semak sendiri untuk butiran)
Saya terlalu jauh, mari kita lihat masalah poster asal.
views.py
): 🎜
rrreee
🎜Sekarang mari pergi ke index.html
untuk melihat cara jinja2
berfungsi Tetapi untuk menjadikan index.html
kelihatan semudah mungkin, saya Modul untuk mencetak Siaran dicadangkan secara berasingan dan dipanggil _post.html
Untuk menggunakannya dalam index.html
, hanya {% sertakan '_posts.html' %. }< /code>Itu sahaja:
Mari kita lihat _post.html
🎜
rrreee
🎜Saya telah membaca sedikit "Flask Web Development: Practical Web Application Development Based on Python" sebelum ini saya akan menyemaknya sedikit hari ini. 🎜
🎜Jawapan penulis semuanya ada dalam buku ini, saya amat mengesyorkan pelajar yang ingin belajar kelalang membaca buku ini! 🎜balas0
PHP中文网2017-05-18 11:01:39
Sebagai contoh, jika anda melawat halaman /index, anda pasti akan mempunyai bahagian belakang dan bahagian hadapan
untuk memberi anda idea Anda boleh mencari sendiri maklumat yang berkaitan dan menggunakan enjin carian untuk mencari pembangunan kelalang#. 🎜🎜#
@app.route('/index')
def index():
data = "从数据库读取出来的数据"
html = []
for item in data:
html.append(item."列名")
return ''.join(html)
为情所困2017-05-18 11:01:39
Anda menerima parameter, anda boleh menggunakan pembolehubah dalam laluan, atau anda boleh menggunakan arahan request.args.get untuk mendapatkan parameter. Kemudian jalankan atur cara untuk mendapatkan hasilnya Sudah tentu, cara yang paling mudah ialah menyambungkannya ke dalam rentetan dan menggunakan pulangan secara langsung. Sudah tentu, cara yang lebih formal ialah menggunakan render_template dan bekerjasama dengan jinjia2 untuk menghasilkan output templat.
Mari kita lihat permulaan cepat kelalang. http://docs.jinkan.org/docs/f...