2012-12-07 8 views
15

Tôi thích các ô Markdown của IPython để kết hợp HTML và nội dung phong phú khác bên trong sổ ghi chép. Tôi muốn biết nếu một đầu ra lệnh có thể được định dạng tương tự, trong các ô đầu ra.Làm cho các ô đầu ra như Markdown

Đây là một trong những chức năng của tôi xuất ra HTML:

print_html(): 
     print """ 
     <h2>Matplotlib's chart gallery (Click a chart to see the code to create it)</h2><br> 
     <div align="center"> <iframe title="Matplotlib Gallery" width="950" 
     height="250" src="http://matplotlib.org/gallery.html#api" frameborder="0" 
     allowfullscreen></iframe></div> 
    """ 

HTML code trên, nếu đặt trong phòng giam markdown (đầu vào), sản xuất liên kết tốt đẹp để thư viện Matplotlib. Nhưng trong ô đầu ra nó chỉ là văn bản thuần túy. Bất kỳ cách nào để làm cho nội dung phong phú?

+0

Giải pháp cho đến nay chỉ có tác dụng cho các chức năng mà bạn gọi trực tiếp từ IPython - những gì nếu chúng ta muốn để render html in/phương pháp khai thác gỗ được gọi là từ bên trong một chức năng? – Peter

Trả lời

16

Tìm thấy một giải pháp ở đây: http://mail.scipy.org/pipermail/ipython-user/2012-April/009838.html

Trích dẫn các giải pháp vào đây để ref:

Brian Granger:

" Có chức năng trả lại HTML liệu được bọc trong một đối tượng HTML:

from IPython.core.display import HTML 
... 
... 
def foo(): 
    raw_html = "<h1>Yah, rendered HTML</h1>" 
    return HTML(raw_html) 

"

Bây giờ gọi foo() không cung cấp định dạng html phong phú như tôi muốn.

+1

Khi thư được liên kết chỉ ra, bạn cần phải nhập HTML như sau: từ nhập IPython.core.display HTML – GermanK

+0

Cảm ơn bạn đã cải thiện câu trả lời này! –

+0

Nhưng bạn không thể trộn nó với một số bản in. Vì vậy, giống như làm cho một tiêu đề và có một số văn bản in ra dưới đây – Norfeldt

4

Chỉ cần thêm một số tính năng bổ sung để mã ví dụ của bạn

htmlContent = '' 

def header(text): 
    raw_html = '<h1>' + str(text) + '</h1>' 
    return raw_html 

def box(text): 
    raw_html = '<div style="border:1px dotted black;padding:2em;">'+str(text)+'</div>' 
    return raw_html 

def addContent(raw_html): 
    global htmlContent 
    htmlContent += raw_html 


# Example 
addContent(header("This is a header")) 
addContent(box("This is some text in a box")) 

from IPython.core.display import HTML 
HTML(htmlContent) 

mang đến cho bạn điều này:

OUTPUT

+0

rất hay để xem các tính năng ưa thích! –

7

Một giải pháp bằng cách nào đó cao cấp hơn thời gian gần đây đã được công bố trong một bài đăng blog ở đây:

http://guido.vonrudorff.de/ipython-notebook-code-output-as-markdown/

Nó tạo và đăng ký một ma thuật IPython mới %%asmarkdown. Đầu ra của mỗi ô mã mà bạn thêm vào trước với lệnh này sẽ được hiển thị như các ô đánh dấu thuần túy. Sử dụng nội dung của câu hỏi ban đầu, sau đây sẽ hành xử như mong đợi:

%%asmarkdown 
print """ 
<h2>Matplotlib's chart gallery (Click a chart to see the code to create it)</h2><br> 
<div align="center"> <iframe title="Matplotlib Gallery" width="950" 
height="250" src="http://matplotlib.org/gallery.html#api" frameborder="0" 
allowfullscreen></iframe></div> 
""" 
+1

Điều này làm việc siêu dễ dàng. Ngoại lệ nhỏ, đối với người dùng python 3, thêm 'từ io nhập khẩu StringIO' thay vì' từ stringIO nhập StringIO'. – josh

+0

Đây là giải pháp tốt nhất để trả lời câu hỏi gốc. –