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@python.org
https://mail.python.org/mailman/listinfo/python-win32


_______________________________________________
python-win32 mailing list
python-win32@python.org
https://mail.python.org/mailman/listinfo/python-win32

Reply via email to