为了账号安全,请及时绑定邮箱和手机立即绑定

django 在每次运行时显示新生成的 html 文件

django 在每次运行时显示新生成的 html 文件

慕码人8056858 2023-02-07 14:41:26
我有一个 python 脚本 (A.py),它接受用户通过表单输入并运行另一个 python 脚本 (B.py)。B.py 将 html 格式的结果存储到名为 yymmdd 的文件夹中。B.py 生成的文件类似于“results_hhmmss.html”,因此每次执行 B.py 脚本时都会创建一个新的 html 文件。根据我下面的 urls.py 代码,访问 127.0.0.1:8888 会将我带到 home_page。此外,一旦我使用主页中的按钮提交表单,脚本就会成功执行,并生成结果文件。此外,如何呈现下一个网页以查看生成的 results_hhmmss.html 文件?我不确定如何构建 urlpatters,因为每次运行脚本时,结果文件都有一个新名称。from django.contrib import adminfrom django.urls import pathfrom . import viewsurlpatterns = [    path('admin/', admin.site.urls),    path('', views.home_page),    # what path or paths to add here ???]我还希望在地址栏中看到文件 results_hhmmss.html(位于文件夹 yymmdd 中)的相对路径,以便稍后可以直接重新访问同一链接。提前感谢您花时间阅读这篇文章并愿意提供帮助。我正在使用 python3 和 Django 版本 3.0.7
查看完整描述

3 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

你可以这样做:view.py


from django.views.generic import TemplateView

class PageView(TemplateView):

    def get_template_names(self):

        template_name = "path_to_template/{}.html".format(self.kwargs["page_name"])

        return [template_name]

然后将更改添加到您的 urls.py


urlpatterns = [

    path('admin/', admin.site.urls),

    path('pages/<page_name>/', views.PageView.as_view()),

    path('', views.home_page),

]


查看完整回答
反对 回复 2023-02-07
?
森林海

TA贡献2011条经验 获得超2个赞

您可以有一个单独的模型来存储生成的 HTML 的路径,就像这样


class HTMLGenerated(models.Model):

    name = models.CharField(max_length=100)

    path = models.CharField(max_length=500) # This will store the relative path

然后您可以在 URL 模式中使用 URL 参数,如下所示:


urlpatterns = [

    path('admin/', admin.site.urls),

    path('<int:html_id>/reports/', views.report_view)

]

相应的视图可以处理类似的东西:


def report_view(request, html_id):

    object = get_object_or_404(HTMLGenerated, pk=html_id)

    # You can access the HTML by

    html = object.path

    # Return the context

    return render(

         request,

         'some_template',

         context = {

             'html': html

         }


查看完整回答
反对 回复 2023-02-07
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

从评论移动到这里进行代码格式化,请您进一步指导和纠正我。谢谢堆。


这是更新的 urls.py


urlpatterns = [

    path('admin/', admin.site.urls),

    path('pages/<page_name>/', views.PageView.as_view()),

    path('', views.welcome_page, name='welcome_page'),

    path('results/', views.andreys_generate_results_file, name='andrey_script')

]

这是 views.py 代码



class PageView(TemplateView):

    def get_template_names(self):

        template_name = "templates/{}.html".format(self.kwargs["page_name"])

        return [template_name]



def andreys_generate_results_file(request):


    hhmmss = str(datetime.now().strftime("%H%M%S"))

    yyyymmdd = str(datetime.now().strftime("%Y%m%d"))


    # new_file_name = yyyymmdd + "/results_" + hhmmss + ".html"  # actual line, commented for Andrey

    new_file_name = "templates/results_" + hhmmss + ".html"

    ls_cmd = "pwd; ls -lart | tee " + new_file_name


    output = subprocess.Popen(ls_cmd, shell=True, stdout=subprocess.PIPE)


    wait_for_sec = request.POST.get('seconds')

    time.sleep(int(wait_for_sec))


    return render(request, new_file_name)



def welcome_page(request):

    # Purpose: Just display welcome_page.html

    return render(request, 'welcome/welcome_page.html')

这是 welcome_page.html 表单代码的一部分:


<p>New Form</p>

<hr>

<form action="{% url 'andrey_script' %}" method="post">


{% csrf_token %}

    Text:

    <input type="text" name="seconds" required><br><br>

    <button type="submit" value="Run Python Script"> Click to Run Python Script</button>

</form>


查看完整回答
反对 回复 2023-02-07
  • 3 回答
  • 0 关注
  • 160 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信