[python-win32] IIS and ASP: If blocks that span multiple code blocks

Mark Hammond skippy.hammond at gmail.com
Mon Nov 2 17:49:41 EST 2020


IIS/ASP sends Python different strings to evaluate, and Python evaluates 
them individually. It's much like wanting Python code such as:

if foo:
   bar()

To be handled in Python by using:

 >>> exec("if foo:\n")
 >>> exec("  bar()\n")

Which doesn't work.

The semantics are largely defined by the "Active Scripting" 
specifications. I haven't kept up with that recently, so it's possible 
there have been enhancements to that spec which might make this 
possible, but if there were, they would have been targeted at making 
languages offered directly by MS better than Python.

So I'm afraid that I think you are out of luck.

Cheers,

Mark

On 2/11/2020 12:12 pm, Steven Manross wrote:
> I was wondering if there's any way to support this style of coding in ASP/Python.
> 
> This works in VBScript (but I'm trying to remove all my VBScript), but I seem to be getting hit by the fact that each block of code is being analyzed as a single block of code and the "if" not being able to span multiple code blocks.
> 
> #VBScript
> <%
> If This = "THAT" Then
>      Response.Write("BEFORE")
> %>
>      This does == THAT<BR>
>      <!-- #include virtual="/inc/whatever.vbscriptincludefile" -->
> <%
>      Response.Write("AFTER<BR>")
> End If
> %>
> 
> What I am trying to show you is that in VBScript, an IF block can span the multiple code regions (<% code %>) and conditionally display the HTML in between the IF and END IF if the condition matches
> 
> Note that in VBScript if This = "THAT", this VBScript would display:
> 
> BEFORE<BR>
> This does == THAT<BR>
>   *** whatever the include file displayed
> AFTER<BR>
> 
> And of course, if This <> "THAT" it wouldn't display anything from above!
> 
> However in Python, and a similarly structured code-block:
> 
> #Python
> <%
> if This == "THAT":
>      Response.Write("BEFORE<BR>")
> %>
>      This does == THAT<BR>
>      <!-- #include virtual="/inc/whatever.pythonincludefile" -->
> <%
> Response.Write("AFTER<BR>")
> %>
> 
> In python, We would get (if This == "THAT"):
> 
> BEFORE
> This does == THAT<BR>
>   *** and whatever the include file displayed (if the include file had no additional logic to filter the data)
> AFTER<BR>
> 
> However, in python, we would get (if This != "THAT"):
> 
> This does == THAT<BR>
>   *** and whatever the include file displayed (if the include file had no additional logic to filter the data)
> AFTER<BR>
> 
> Lastly, if I indent the Response.Write("AFTER<BR>") in this second code block to try and span the code block to the same conditional started in the first code block, I get a syntax error like this:
> 
> unexpected indent
> /folder/somefile.asp, line ###
>      Response.Write("AFTER<BR>")
> ---^
> 
> is there any way around this without doing a lot of other if blocks in each section of <% code %>
> 
> It sounds like an RFE to me (and probably not an easy one), but maybe I'm missing something?
> 
> IIS on W2016 (most recent patches)
> Activestate Python: 3.8.2
> pywin32==227
> 
> Please and Thank You,
> Steven
> _______________________________________________
> python-win32 mailing list
> python-win32 at python.org
> https://mail.python.org/mailman/listinfo/python-win32
> 



More information about the python-win32 mailing list